엑셀 VBA에서 Deactivate 이벤트는 특정 워크북(Workbook) 또는 워크시트(Worksheet)가 비활성화될 때 실행되는 이벤트입니다.
즉, 사용자가 다른 시트나 다른 워크북으로 이동할 때 특정 동작을 자동으로 실행할 수 있습니다.
1. 기본 문법
📌 Workbook_Deactivate 이벤트 (워크북이 비활성화될 때)
Private Sub Workbook_Deactivate()
' 실행할 코드
End Sub
|
📌 현재 워크북에서 다른 워크북으로 이동할 때 실행됨
📌 이 코드는 ThisWorkbook 모듈에 작성해야 함
📌 Worksheet_Deactivate 이벤트 (워크시트가 비활성화될 때)
Private Sub Worksheet_Deactivate()
' 실행할 코드
End Sub
|
📌 현재 시트에서 다른 시트로 이동할 때 실행됨
📌 이 코드는 특정 워크시트(Sheet1, Sheet2 등)에 작성해야 함
2. 워크북이 비활성화되면 메시지 표시 (Workbook_Deactivate)
Private Sub Workbook_Deactivate()
MsgBox "이 워크북이 비활성화되었습니다!", vbInformation
End Sub
|
📌 현재 워크북에서 다른 워크북으로 이동할 때 메시지 표시
3. 워크시트가 비활성화되면 특정 값 변경 (Worksheet_Deactivate)
Private Sub Worksheet_Deactivate()
Range("B1").Value = "마지막으로 사용한 시트: " & Me.Name
End Sub
|
📌 현재 시트에서 다른 시트로 이동할 때 B1 셀에 시트 이름 저장
4. 워크시트가 비활성화될 때 특정 열 숨기기
Private Sub Worksheet_Deactivate()
Columns("C:E").Hidden = True
End Sub
|
📌 현재 시트에서 벗어날 때 C~E열을 자동으로 숨김
5. 워크시트가 비활성화될 때 특정 열 보이기
Private Sub Worksheet_Deactivate()
Columns("C:E").Hidden = False
End Sub
|
📌 현재 시트를 떠날 때 C~E열이 다시 보이도록 설정
6. 워크북이 비활성화되면 자동 저장 (Workbook_Deactivate)
Private Sub Workbook_Deactivate()
ThisWorkbook.Save
MsgBox "이 파일이 자동으로 저장되었습니다!", vbInformation
End Sub
|
📌 워크북이 비활성화될 때 자동 저장 후 메시지 표시
7. 워크시트가 비활성화될 때 특정 값 지우기
Private Sub Worksheet_Deactivate()
Range("A1:B10").ClearContents
End Sub
|
📌 다른 시트로 이동할 때 A1:B10 범위의 데이터를 지움
8. 워크시트가 비활성화될 때 특정 매크로 실행
Private Sub Worksheet_Deactivate()
Call 내매크로
End Sub
Sub 내매크로()
MsgBox "이 시트에서 나갈 때 실행된 매크로입니다!"
End Sub
|
📌 다른 시트로 이동할 때 내매크로 실행
9. 이전 활성화된 시트를 저장하고 되돌아가기
Dim 이전시트 As Worksheet
Private Sub Worksheet_Deactivate()
Set 이전시트 = ActiveSheet
End Sub
Sub 이전시트_복귀()
If Not 이전시트 Is Nothing Then
이전시트.Activate
Else
MsgBox "이전 시트 정보가 없습니다."
End If
End Sub
|
📌 다른 시트로 이동하기 전 현재 시트를 저장하고, 필요할 때 다시 활성화할 수 있도록 설정
10. 비활성화된 시트 이름을 즉시 창(Immediate Window)에 출력
Private Sub Worksheet_Deactivate()
Debug.Print "비활성화된 시트: " & Me.Name
End Sub
|
📌 현재 시트에서 벗어날 때 즉시 창(Ctrl + G)에서 시트 이름을 확인
11. 워크시트가 비활성화될 때 특정 설정 변경
Private Sub Worksheet_Deactivate()
ActiveWindow.DisplayGridlines = True ' 격자선 보이기
ActiveWindow.DisplayHeadings = False ' 행/열 번호 숨기기
End Sub
|
📌 현재 시트를 떠날 때 격자선을 다시 보이게 설정하고, 행/열 번호 숨기기
12. 워크북이 비활성화될 때 특정 파일 열기
Private Sub Workbook_Deactivate()
Workbooks.Open "C:\Users\Public\백업.xlsx"
End Sub
|
📌 현재 워크북을 떠날 때 자동으로 "백업.xlsx" 파일 열기
13. 워크북이 비활성화될 때 특정 시트 저장
Dim 마지막시트 As String
Private Sub Workbook_Deactivate()
마지막시트 = ActiveSheet.Name
End Sub
Private Sub Workbook_Activate()
Sheets(마지막시트).Activate
End Sub
|
📌 워크북을 떠날 때 마지막으로 사용한 시트를 저장하고, 다시 돌아올 때 해당 시트를 활성화
📌 Deactivate 이벤트 사용 시 주의할 점
- 워크북(Workbook_Deactivate)과 워크시트(Worksheet_Deactivate)의 차이를 이해해야 한다
- Workbook_Deactivate()는 워크북이 비활성화될 때 실행
- Worksheet_Deactivate()는 워크시트가 비활성화될 때 실행
- 불필요한 Activate/Deactivate 사용을 피해야 한다
- Activate 없이도 작업을 수행할 수 있는 경우가 많음 (예: Sheets("시트명").Range("A1").Value = 10)
- 워크북이 닫힐 때 실행하려면 Workbook_BeforeClose를 사용할 것
- Workbook_Deactivate()는 단순히 비활성화될 때만 실행됨
📝 정리
기능
|
VBA 코드 (Deactivate 이벤트)
|
워크북 비활성화 시 메시지 표시
|
MsgBox "워크북이 비활성화되었습니다!"
|
워크시트 비활성화 시 특정 값 변경
|
Range("B1").Value = "마지막 시트: " & Me.Name
|
워크시트 비활성화 시 특정 열 숨기기
|
Columns("C:E").Hidden = True
|
워크북 비활성화 시 자동 저장
|
ThisWorkbook.Save
|
워크시트 비활성화 시 특정 데이터 지우기
|
Range("A1:B10").ClearContents
|
워크시트 비활성화 시 특정 매크로 실행
|
Call 내매크로
|
이전 시트 정보 저장 및 복귀
|
Dim 이전시트 As Worksheet 활용
|
비활성화된 시트 이름 즉시 창 출력
|
Debug.Print "비활성화된 시트: " & Me.Name
|
워크북 비활성화 시 특정 파일 열기
|
Workbooks.Open "경로\파일.xlsx"
|
워크북 비활성화 시 마지막 시트 저장
|
Dim 마지막시트 As String: 마지막시트 = ActiveSheet.Name
|
🔥 VBA의 Deactivate 이벤트를 활용하면 특정 워크북/시트에서 벗어날 때 원하는 작업을 자동으로 실행할 수 있습니다! 🚀