Spędziłem dużo czasu na badaniu tego i uczeniu się, jak to wszystko działa, po tym, jak naprawdę zepsułem wyzwalacze zdarzeń. Ponieważ było tak wiele rozproszonych informacji, postanowiłem podzielić się tym, co znalazłem, aby działać w jednym miejscu, krok po kroku w następujący sposób:
1) Otwórz Edytor VBA, pod Projektem VBA (NazwaTwojejKsiążki.xlsm) otwórz obiekt Microsoft Excel i wybierz arkusz, którego będzie dotyczyło zdarzenie zmiany.
2) Domyślny widok kodu to „Ogólne”. Z rozwijanej listy w górnej środkowej części wybierz „Arkusz”.
3) Private Sub Worksheet_SelectionChange już tam jest tak, jak powinno, zostaw to w spokoju. Skopiuj / Wklej kod Mike'a Rosenbluma z góry i zmień odwołanie .Range do komórki, dla której szukasz zmiany (B3, w moim przypadku). Nie umieszczaj jednak jeszcze swojego makra (usunąłem słowo „makro” po „to”):
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("H5")) Is Nothing Then
End Sub
lub z listy rozwijanej w lewym górnym rogu wybierz „Zmień” i w miejscu między Private Sub i End Sub wklej If Not Intersect(Target, Me.Range("H5")) Is Nothing Then
4) W wierszu po „Następnie” wyłącz zdarzenia, aby wywołanie makra nie wywoływało zdarzeń i spróbuj ponownie uruchomić ten arkusz roboczy_Zmień w niekończącym się cyklu, który powoduje awarię programu Excel i / lub w inny sposób wszystko psuje:
Application.EnableEvents = False
5) Wywołaj swoje makro
Call YourMacroName
6) Włącz wydarzenia z powrotem, aby następna zmiana (i wszystkie / wszystkie inne zdarzenia) zostały uruchomione:
Application.EnableEvents = True
7) Zakończ blok If i Sub:
End If
End Sub
Cały kod:
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
Powoduje to włączanie / wyłączanie zdarzeń z modułów, co stwarza problemy i po prostu pozwala wyzwalaczowi zmiany, wyłącza zdarzenia, uruchamia makro i ponownie włącza zdarzenia.