Event

Activate 이벤트

노만e 2025. 3. 17. 07:25

엑셀 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 이벤트 사용 시 주의할 점

  1. 워크북(Workbook_Activate)과 워크시트(Worksheet_Activate)의 차이를 이해해야 한다
  • Workbook_Activate()는 해당 워크북이 활성화될 때 실행
  • Worksheet_Activate()는 해당 시트가 선택될 때 실행
  1. 불필요한 Activate 사용을 피해야 한다
  • Activate 없이도 작업을 수행할 수 있는 경우가 많음 (예: Range("A1").Value = 10 대신 Sheets("시트명").Range("A1").Value = 10)
  1. 시트가 변경될 때마다 실행되므로 성능에 영향을 줄 수 있음
  • 복잡한 코드 실행 시 주의 필요

📝 정리

기능
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 이벤트를 활용하면 특정 워크북/시트가 선택될 때 자동으로 원하는 작업을 수행할 수 있습니다! 🚀