Я витратив багато часу, досліджуючи це і дізнавшись, як все це працює, після того, як справді зіпсував тригери події. Оскільки було так багато розкиданої інформації, я вирішив поділитися тим, що, як мені здається, працює в одному місці, крок за кроком наступним чином:
1) Відкрийте редактор VBA, за проектом VBA (YourWorkBookName.xlsm) відкрийте об’єкт Microsoft Excel і виберіть Аркуш, до якого стосуватиметься подія зміни.
2) Типовим переглядом коду є "Загальне". У спадному списку у верхній середині виберіть "Робочий аркуш".
3) Private Sub Worksheet_SelectionChange вже є як слід, залиште це в спокої. Скопіюйте / вставте код Майка Розенблюма зверху та змініть посилання .Range на клітинку, для якої ви спостерігаєте за зміною (B3, у моєму випадку). Однак поки не розміщуйте свій макрос (слово "макрос" я видалив після "потім"):
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("H5")) Is Nothing Then
End Sub
або з випадаючого списку вгорі ліворуч виберіть "Змінити" і вставте в пробіл між приватним суб-та кінцевим суб-списком If Not Intersect(Target, Me.Range("H5")) Is Nothing Then
4) У рядку після "Потім" вимкніть події, щоб, коли ви викликаєте ваш макрос, він не запускав події і спробував запустити цей 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
Це вимагає включення / вимкнення подій з Модулів, що створює проблеми і просто дозволяє тригеру змін, вимикає події, запускає ваш макрос і знову включає події.