나는 이것을 조사하고 이벤트 트리거를 정말로 엉망으로 만든 후에 모든 것이 어떻게 작동하는지 배우는 데 많은 시간을 보냈습니다. 흩어져있는 정보가 너무 많기 때문에 다음과 같이 한 곳에서 모든 작업을 수행 한 것을 단계별로 공유하기로 결정했습니다.
1) VBA 편집기를 열고 VBA 프로젝트 (YourWorkBookName.xlsm)에서 Microsoft Excel 개체를 열고 변경 이벤트가 포함될 시트를 선택합니다.
2) 기본 코드보기는 "일반"입니다. 중간 상단의 드롭 다운 목록에서 "워크 시트"를 선택합니다.
3) Private Sub Worksheet_SelectionChange가 이미 있어야하므로 그대로 두십시오. 위에서 Mike Rosenblum의 코드를 복사 / 붙여 넣기하고 .Range 참조를 변경 사항을보고있는 셀로 변경합니다 (제 경우 B3). 그러나 아직 매크로를 배치하지 마십시오 ( "Then"뒤에 "Macro"라는 단어를 제거했습니다).
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("H5")) Is Nothing Then
End Sub
또는 왼쪽 상단의 드롭 다운 목록에서 "변경"을 선택하고 Private Sub와 End Sub 사이의 공간에 붙여 넣습니다. If Not Intersect(Target, Me.Range("H5")) Is Nothing Then
4) "Then"다음 줄에서 이벤트를 해제하여 매크로를 호출 할 때 이벤트를 트리거하지 않고이 Worksheet_Change를 끝없는 주기로 다시 실행하여 Excel을 중단하거나 모든 것을 엉망으로 만듭니다.
Application.EnableEvents = False
5) 매크로 호출
Call YourMacroName
6) 이벤트를 다시 켜서 다음 변경 (및 기타 모든 이벤트)이 트리거되도록합니다.
Application.EnableEvents = True
7) If 블록과 Sub를 종료합니다.
End If
End Sub
전체 코드 :
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("B3")) Is Nothing Then
Application.EnableEvents = False
Call UpdateAndViewOnly
Application.EnableEvents = True
End If
End Sub
이것은 문제를 일으키는 모듈에서 이벤트를 켜고 끄는 것을 취하고 단순히 변경을 트리거하고 이벤트를 끄고 매크로를 실행하고 이벤트를 다시 켭니다.