VBA 에는 기본적으로 엑셀과 관련된 Callback 이벤트 함수들을 제공합니다. 엑셀 프로그램을 사용하는 도중에 발생하는 이벤트들을 받아서 원하는 로직을 구현할 수 있는 것입니다. 오늘은 문서가 열릴 때 발생하는 이벤트 함수에 기능을 구현해 보겠습니다. 보통 언제 문서를 작업했는지 작업 날짜를 표시하고 싶을 때 많이 사용합니다. 작업 문서 이벤트는 크게 2가지로 나눌 수 있습니다. 하나는 Workbook 이벤트 입니다. 프로그램 전체에서 발생하는 Callback 이벤트 함수들이 들어가 있습니다. 또 다른 하나는 Worksheet 입니다. 해당 Sheet 에서 발생하는 이벤트 함수들로 구성이 되어 있습니다. 이번 포스팅에서는 Workbook 의 Workbook_open() 함수를 이용해서 통합문서가 열릴 때 현재 날짜를 표시할 것입니다.
▼ 먼저 Workbook 과 Worksheet 가 어떻게 다른지 알아 보겠습니다. 그림처럼 왼쪽 탐색기에서 Sheet1 열었다면 이벤트 함수의 첫 번째 선택란에는 Worksheet 가 나타납니다.
▼ 엑셀 프로그램 전체에 대한 이벤트 함수는 “현재_통합_문서” 를 클릭해서 열어야 합니다. 그럼 오른쪽 이벤트 함수 첫 번째 선택란에 Workbook 이 나타납니다. 두 번째 선택란에서 Open 을 선택합니다. 아래 에디터에는 통합 문서가 열릴 때 발생하는 Workbook_open() 이벤트 함수가 만들어 집니다.
▼ Workbook_open() 이벤트 함수에는 문서를 열 때마다 작업 이력을 표시하기 위해 작성자와 날짜를 입력할 것입니다. 그리고 전체 이력을 남기기 위해 이전 입력값 아래에 표시가 되어야 합니다.
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 엑셀 VBA - 특정시트나 셀이 선택되었을 때 실행되는 이벤트 함수 ▶ 엑셀 VBA 시트 더블클릭 이벤트로 셀에 배경색 변경하기 ▶ 엑셀 VBA 영역을 선택했을 때 이벤트 처리하기 ▶ 엑셀 VBA 개체, 속성, 함수, 이벤트 사용법과 사례 검색해서 참고하기 ▶ 엑셀 VBA 매크로 소스 주석 Comments 넣는 방법 |
▼ 소스는 다음과 같습니다. 간략하게 소스를 설명하자면 시트명 Sheet1 에 A2 부터 시작해서 어디까지 표시되어 있는지 알아 낸 뒤 바로 아래에 이름과 현재 날짜를 표시합니다. CurrentRegion.Rows.count 를 이용해서 행의 수를 알아내고 Offset 으로 현재 위치와 현재위치에서 오른쪽으로 한 칸 옆으로 날짜를 입력합니다.
Private Sub Workbook_Open() Dim count, i With Sheets("Sheet4").Range("A2") i = .CurrentRegion.Rows.count .Offset(i, 0) = Application.UserName .Offset(i, 1) = Now() End With End Sub |
▼ 그림처럼 문서를 열 때마다 함수를 실행해서 시트에 값이 추가했습니다. 이렇게 문서에 대한 사용자의 작업 이력을 남길 수 있습니다.
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 엑셀 VBA - 특정시트나 셀이 선택되었을 때 실행되는 이벤트 함수 ▶ 엑셀 VBA 시트 더블클릭 이벤트로 셀에 배경색 변경하기 ▶ 엑셀 VBA 영역을 선택했을 때 이벤트 처리하기 ▶ 엑셀 VBA 개체, 속성, 함수, 이벤트 사용법과 사례 검색해서 참고하기 ▶ 엑셀 VBA 매크로 소스 주석 Comments 넣는 방법 |
'엑셀(Excel) > VBA' 카테고리의 다른 글
엑셀 VBA For Each 반복문 이용해서 셀 영역 병합 및 합계 구하기 (0) | 2024.06.15 |
---|---|
엑셀 VBA 영역(Range)을 배열(Array) 로 변경하기 (5) | 2024.06.15 |
엑셀 VBA 데이터 분리해서 다른 시트에 붙여 넣기 (3) | 2024.06.13 |
엑셀 VBA 웹브라우저(인터넷 익스플로러) 띄우는 방법 (0) | 2024.06.12 |
엑셀 VBA 날짜 관련 함수, 개체 사용하는 방법 (0) | 2024.06.02 |
엑셀 VBA 중복 데이터 재귀 호출과 반복문 사용해서 삭제하기 (0) | 2024.06.02 |
엑셀 VBA 문자열, 텍스트 숫자를 문자열 숫자로 변경하기 (0) | 2024.06.01 |
엑셀 VBA 문자열 글자 하나씩 추출하기 (0) | 2024.05.31 |