특정 통합 문서가 선택되고, 통합 문서의 시트가 선택되고, 셀이 값을 변경하고, 두 번 클릭이 발생하거나, 시트가 추가 될 때 등의 경우 매크로 / VBA 스 니펫을 실행할 수 있습니다.이 모든 경우에 우리는 통합 문서 이벤트 처리기. 이벤트 핸들러는 특정 이벤트가 발생할 때마다 VBA 코드를 실행하는 데 도움이됩니다.

이 기사에서는 각 통합 문서 이벤트 처리기에 대해 간략하게 설명합니다.

통합 문서 이벤트 처리기 란 무엇입니까? 통합 문서 이벤트 처리기는 통합 문서에 로컬 인 서브 루틴입니다.

이러한 코드는 통합 문서의 구성 요소에서만 작동합니다. 그것은 통합 문서 자체이며 시트와 범위입니다.

통합 문서 이벤트 처리기 코드는 어디에 작성합니까?

통합 문서 이벤트는 통합 문서 개체에만 기록됩니다. 일부 일반 모듈에서 통합 문서 이벤트를 작성하면 오류는 없지만 작동하지 않습니다.

통합 문서 개체를 작성합니다. 두 번 클릭하거나 마우스 오른쪽 버튼을 클릭하고보기 코드를 클릭합니다. 코드 작성 영역이 표시됩니다.

통합 문서의 특정 이벤트에 대한 코드를 작성하는 방법은 무엇입니까?

이제 편집 모드에있을 때 왼쪽 상단 모서리 드롭 다운 메뉴에서 일반을 ​​볼 수 있습니다. 드롭 다운을 클릭하고 통합 문서를 선택합니다. 오른쪽 상단 모서리 드롭 다운에 모든 이벤트가 표시됩니다. 필요한 것을 선택하면 해당 이벤트에 대한 골격 코드가 작성됩니다.

각 이벤트에는 고정 된 프로 시저 이름이 있습니다. workbook_로 시작하는 예약 된 서브 루틴 이름입니다. 다른 서브 루틴에는 사용할 수 없습니다 (사용할 수는 있지만 일반 서브 루틴이됩니다).

중요 : _ 해당 목록의 각 서브 루틴은 지정된 이벤트에서 실행됩니다 ._

_ 한 종류의 워크 북 이벤트 프로시 저는 한 워크 북에 한 번만 작성할 수 있습니다. 하나의 통합 문서에 두 개의 동일한 이벤트 처리 프로 시저를 작성하면 오류가 발생하고 실행되지 않습니다.

물론 오류는 모호한 서브 루틴입니다 ._

각 이벤트에 대해 간략히 알아 보겠습니다.

  1. Workbook_SheetChange (ByVal Sh As Object, ByVal Target As Range) 이벤트이 이벤트는 포함 된 워크 시트를 변경할 때 트리거됩니다 (서식 제외). 시트에 변경 사항이 있으면 코드는 다음과 같습니다.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

'do something

Msgbox "done something"

End Sub

“Sh”는 항상 활성 시트입니다. “대상”은 항상 활성 셀입니다.

다른 예 : A1이 변경되면 Cel, prl B1에 날짜와 시간을 입력 할 수 있습니다. 이 경우 workbook_sheetchange 이벤트를 사용합니다. 코드는 다음과 같습니다.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

If Target.Address = "$A$1" Then

Range("B1").Value2 = Format(Now(), "hh:mm:ss")

End If

End Sub

“sh”개체를 지정하지 않았으므로 모든 시트의 A1 셀만 대상으로합니다.

  1. Workbook_Activate () 이벤트이 이벤트는 통합 문서가 포함 된 이벤트 코드가 활성화 될 때 트리거됩니다. 이 이벤트의 골격 코드는 다음과 같습니다.

Private Sub Workbook_Activate()

End Sub

간단한 예는 선택 될 때 통합 문서 이름을 표시하는 것입니다.

Private Sub Workbook_Activate()

MsgBox "You are on workbook " & Activeworkbook.Name

End Sub

이 코드가 포함 된 통합 문서로 오자마자 이벤트가 실행되고 “You are on workbook name”이라는 메시지가 표시됩니다 (제 경우 sheet2).

  1. Workbook_Open () 이벤트 통합 문서가 열리 자마자 매크로를 실행하는 방법에 대해 가장 많이 묻는 질문 중 하나입니다. 이것이 답입니다. 이 통합 문서 이벤트는 통합 문서가 열리 자마자 실행됩니다. Workbook_Activate ()와 달리이 코드는 활성화 될 때마다 실행되는 것이 아니라 한 번만 실행됩니다.

Private Sub Workbook_Open()

'your code

'

End Sub

아래 예제 Workbook_Open 이벤트는 통합 문서가 포함 된 코드를 열 때 환영 메시지를 표시합니다.

Private Sub Workbook_Open()

MsgBox "Welcome to the Master File"

End Sub
  1. Workbook_Deactivate () 이벤트이 이벤트는 통합 문서가 포함 된 코드를 떠날 때 트리거됩니다. 즉, 통합 문서를 전환 할 때 시트를 숨기는 등의 작업을 수행하려면이 VBA 이벤트를 사용하십시오. 구문은 다음과 같습니다.

Private Sub Workbook_Deactivate()

'your code

'

End Sub

아래 예제 Workbook_Deativate 이벤트는이 시트를 떠날 때 마스터 시트를 떠났다는 메시지를 표시합니다.

Private Sub Workbook_Deactivate()

MsgBox "You Left The Master Sheet"

End Sub
  1. Workbook_BeforeClose () 이벤트이 이벤트는 시트가 포함 된 VBA 이벤트의 삭제를 확인할 때 트리거됩니다. 구문은 간단합니다.

Private Sub Workbook_BeforeClose(Cancel as Boolean)

End Sub

통합 문서를 열린 상태로 유지하려는 경우 취소를 true로 설정할 수 있습니다.

아래 코드는 마감 예정인 통합 문서의 내용을 저장할 것인지 묻습니다.

Private Sub Workbook_BeforeClose(Cancel as Boolean)

ans = MsgBox("Do you want to save the content of this workbook?", vbYesNo)

If ans = True Then

thisworkbook.save

End If

End Sub
  1. Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean) 이벤트이 이벤트는 통합 문서가 저장되기 전에 트리거됩니다. 구문은 간단합니다.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

End Sub

SaveAsUI는 통합 문서에 변경 사항이있는 경우 True로 설정됩니다 (VBA가 아님).

통합 문서를 저장하지 않은 상태로 유지하려면 취소를 true로 설정할 수 있습니다.

아래 코드는 저장 예정 통합 문서의 내용을 저장할 것인지 묻습니다.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel as Boolean)

ans = MsgBox("Do you really want to save the content of this workbook?", vbYesNo)

If ans = False Then

Cancel = True

End If

End Sub
  1. Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean) 이벤트이 이벤트는 통합 문서가 저장되기 전에 트리거됩니다. 구문은 간단합니다.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

End Sub

통합 문서에 변경 사항이있는 경우 SaveAsUI가 True로 설정됩니다 (VBA가 아님).

통합 문서를 저장하지 않은 상태로 유지하려면 취소를 true로 설정할 수 있습니다.

아래 코드는 저장 예정 통합 문서의 내용을 저장할 것인지 묻습니다.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel as Boolean)

ans = MsgBox("Do you really want to save the content of this workbook?", vbYesNo)

If ans = False Then

Cancel = True

End If

End Sub
  1. Workbook_NewSheet (ByVal Sh As Object) 이벤트이 이벤트는 통합 문서에 새 시트를 추가 할 때 발생합니다. 구문은 간단합니다.

Private Sub Workbook_NewSheet(ByVal Sh As Object)

End Sub

Sh는 시트 개체입니다. 유형은 실제로 핵심 개체이므로 차트 시트, 매크로 시트 또는 대화 시트를 추가해도 이벤트가 계속 작동합니다.

아래 코드는 새로 추가 된 시트의 이름을 추가하고 표시합니다.

Private Sub Workbook_NewSheet(ByVal Sh As Object)

MsgBox "You added a new sheet. " & Sh.Name

End Sub

통합 문서 개체의 더 많은 이벤트가 있습니다. 여기서 모두 논의 할 수는 없습니다. 특정 이벤트에 대해 알고 싶다면 아래 댓글 섹션에 문의하십시오. 이 기사에서 워크 북 이벤트의 기본 사항을 설명 할 수 있었기를 바랍니다. 아래 댓글 섹션에서 도움이되었는지 알려주세요.

관련 기사 :

link : / tips-using-worksheet-change-event-to-run-macro-when-any-change-is-made [워크 시트 변경 이벤트를 사용하여 변경시 매크로 실행]| 따라서 시트가 업데이트 될 때마다 매크로를 실행하기 위해 VBA의 워크 시트 이벤트를 사용합니다.

link : / events-in-vba-run-macro-if-any-change-made-on-sheet-range [지정된 범위의 시트에 변경 사항이있는 경우 매크로 실행]| 지정된 범위의 값이 변경 될 때 매크로 코드를 실행하려면이 VBA 코드를 사용하십시오. 지정된 범위에서 변경된 사항을 감지하고 이벤트를 시작합니다.

link : / events-in-vba-simplest-vba-code-to-highlight-current-row-and-column-using [현재 행 및 열을 사용하여 강조 표시하는 가장 간단한 VBA 코드]| 이 작은 VBA 스 니펫을 사용하여 시트의 현재 행과 열을 강조 표시합니다.

인기 기사 :

link : / keyboard-formula-shortcuts-50-excel-shortcuts-to-increase-your-productivity [50 개의 Excel 단축키로 생산성 향상]| 작업 속도를 높이십시오. 이 50 개의 바로 가기를 사용하면 Excel에서 작업 속도가 더욱 빨라집니다.

link : / formulas-and-functions-introduction-of-vlookup-function [Excel의 VLOOKUP 함수]| 이것은 다른 범위와 시트에서 값을 조회하는 데 사용되는 Excel의 가장 많이 사용되고 인기있는 기능 중 하나입니다. link : / tips-countif-in-microsoft-excel [Excel 2016의 COUNTIF]| 이 놀라운 기능을 사용하여 조건으로 값을 계산합니다. 특정 값을 계산하기 위해 데이터를 필터링 할 필요가 없습니다.

Countif 기능은 대시 보드를 준비하는 데 필수적입니다.

link : / excel-formula-and-function-excel-sumif-function [Excel에서 SUMIF 함수 사용 방법]| 이것은 또 다른 대시 보드 필수 기능입니다. 이를 통해 특정 조건에 대한 값을 합산 할 수 있습니다.