엑셀 VBA에서 Activate 이벤트는 워크시트(Worksheet) 또는 워크북(Workbook)이 활성화될 때 자동으로 실행되는 이벤트입니다.
즉, 사용자가 특정 워크북 또는 워크시트를 선택할 때 실행할 작업을 자동화할 수 있습니다.
1. 기본 문법
📌 Workbook의 Activate 이벤트 (Workbook 활성화 시)
Private Sub Workbook_Activate()
' 실행할 코드
End Sub
|
📌 이 코드는 ThisWorkbook 모듈에 작성해야 함
📌 해당 워크북이 활성화되면 실행됨
📌 Worksheet의 Activate 이벤트 (시트 활성화 시)
Private Sub Worksheet_Activate()
' 실행할 코드
End Sub
|
📌 이 코드는 특정 워크시트(Sheet1, Sheet2 등)에 작성해야 함
📌 사용자가 해당 시트를 선택하면 실행됨
2. 워크북이 활성화되면 메시지 표시 (Workbook_Activate)
Private Sub Workbook_Activate()
MsgBox "현재 워크북이 활성화되었습니다!"
End Sub
|
📌 워크북이 활성화되면 메시지 표시
3. 워크시트가 활성화되면 특정 셀 선택 (Worksheet_Activate)
Private Sub Worksheet_Activate()
Range("A1").Select
End Sub
|
📌 사용자가 해당 시트를 선택하면 자동으로 A1 셀을 선택
4. 시트 활성화 시 현재 날짜 입력 (Worksheet_Activate)
Private Sub Worksheet_Activate()
Range("B2").Value = Date
End Sub
|
📌 시트가 활성화되면 B2 셀에 현재 날짜를 입력
5. 시트가 활성화되면 특정 데이터 필터 적용
Private Sub Worksheet_Activate()
ActiveSheet.Range("A1:A100").AutoFilter Field:=1, Criteria1:="완료"
End Sub
|
📌 시트를 활성화할 때 특정 값("완료")으로 필터 적용
6. 시트 활성화 시 특정 열 숨기기
Private Sub Worksheet_Activate()
Columns("C:E").Hidden = True
End Sub
|
📌 C~E열을 자동으로 숨김 (해당 시트가 선택될 때만 적용됨)
7. 시트 활성화 시 특정 열 보이기
Private Sub Worksheet_Activate()
Columns("C:E").Hidden = False
End Sub
|
📌 C~E열이 숨겨져 있더라도 해당 시트를 선택하면 다시 보이도록 설정
8. 워크북이 활성화되면 특정 시트로 이동 (Workbook_Activate)
Private Sub Workbook_Activate()
Sheets("대시보드").Activate
End Sub
|
📌 워크북이 활성화되면 자동으로 "대시보드" 시트로 이동
9. 이전 활성화된 시트를 저장하고 되돌아가기
Dim 이전시트 As Worksheet
Private Sub Worksheet_Deactivate()
Set 이전시트 = ActiveSheet
End Sub
Private Sub Worksheet_Activate()
If Not 이전시트 Is Nothing Then
MsgBox "이전 시트는 " & 이전시트.Name & " 입니다."
End If
End Sub
|
📌 다른 시트로 이동하기 전 현재 시트를 저장하고, 새 시트가 활성화되었을 때 이전 시트 정보를 표시
10. 활성화된 워크북이 변경될 때 자동 저장 (Workbook_Activate)
Private Sub Workbook_Activate()
ThisWorkbook.Save
MsgBox "이 파일이 자동으로 저장되었습니다!"
End Sub
|
📌 워크북이 활성화될 때 자동으로 저장 후 메시지 표시
11. 워크북이 활성화되면 특정 매크로 실행
Private Sub Workbook_Activate()
Application.Run "내매크로"
End Sub
Sub 내매크로()
MsgBox "워크북이 활성화될 때 실행된 매크로입니다!"
End Sub
|
📌 워크북이 활성화될 때 내매크로 실행
12. 활성화된 시트에 따라 특정 설정 변경
Private Sub Worksheet_Activate()
If Me.Name = "보고서" Then
ActiveWindow.DisplayGridlines = False
Else
ActiveWindow.DisplayGridlines = True
End If
End Sub
|
📌 "보고서" 시트가 활성화되면 격자선을 숨기고, 다른 시트에서는 보이도록 설정
13. 시트가 활성화될 때 특정 값 음성 출력
Private Sub Worksheet_Activate()
Application.Speech.Speak "현재 활성화된 시트는 " & Me.Name & "입니다."
End Sub
|
📌 시트가 활성화될 때 해당 시트명을 음성으로 읽어줌 (Windows TTS 기능 활용)
14. 활성화된 시트에 따라 다른 설정 적용
Private Sub Worksheet_Activate()
Select Case Me.Name
Case "매출"
Columns("A:D").Hidden = False
Case "보고서"
Columns("A:D").Hidden = True
End Select
End Sub
|
📌 시트가 활성화될 때 시트 이름에 따라 특정 열 숨김/표시
15. 시트 활성화 시 자동 필터 제거
Private Sub Worksheet_Activate()
If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False
End Sub
|
📌 현재 시트가 활성화될 때 기존 필터를 자동으로 제거
📌 Activate 이벤트 사용 시 주의할 점
- 워크북(Workbook_Activate)과 워크시트(Worksheet_Activate)의 차이를 이해해야 한다
- Workbook_Activate()는 해당 워크북이 활성화될 때 실행
- Worksheet_Activate()는 해당 시트가 선택될 때 실행
- 불필요한 Activate 사용을 피해야 한다
- Activate 없이도 작업을 수행할 수 있는 경우가 많음 (예: Range("A1").Value = 10 대신 Sheets("시트명").Range("A1").Value = 10)
- 시트가 변경될 때마다 실행되므로 성능에 영향을 줄 수 있음
- 복잡한 코드 실행 시 주의 필요
📝 정리
기능
|
VBA 코드 (Activate 이벤트)
|
워크북 활성화 시 메시지 표시
|
MsgBox "현재 워크북이 활성화되었습니다!"
|
시트 활성화 시 특정 셀 선택
|
Range("A1").Select
|
시트 활성화 시 현재 날짜 입력
|
Range("B2").Value = Date
|
시트 활성화 시 특정 필터 적용
|
ActiveSheet.Range("A1:A100").AutoFilter Field:=1, Criteria1:="완료"
|
워크북 활성화 시 특정 시트 이동
|
Sheets("대시보드").Activate
|
이전 시트 정보 저장 및 복귀
|
Dim 이전시트 As Worksheet 활용
|
워크북 활성화 시 자동 저장
|
ThisWorkbook.Save
|
시트 활성화 시 격자선 숨기기
|
ActiveWindow.DisplayGridlines = False
|
시트 활성화 시 음성 출력
|
Application.Speech.Speak "현재 시트는 " & Me.Name
|
시트 활성화 시 자동 필터 제거
|
If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False
|
🔥 VBA의 Activate 이벤트를 활용하면 특정 워크북/시트가 선택될 때 자동으로 원하는 작업을 수행할 수 있습니다! 🚀