Я потратил много времени на изучение этого и изучение того, как все это работает, после того, как действительно испортил триггеры событий. Поскольку было так много разрозненной информации, я решил поделиться тем, что я нашел для работы, в одном месте, шаг за шагом следующим образом:
1) Откройте редактор VBA, в разделе VBA Project (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) В строке после «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
Это позволяет включать / выключать события из модулей, что создает проблемы, и просто позволяет запускать изменение, отключает события, запускает ваш макрос и снова включает события.