Ich habe viel Zeit damit verbracht, dies zu erforschen und zu lernen, wie alles funktioniert, nachdem ich die Ereignisauslöser wirklich durcheinander gebracht habe. Da es so viele verstreute Informationen gab, beschloss ich, das, was ich gefunden habe, Schritt für Schritt an einem Ort wie folgt zu teilen:
1) Öffnen Sie den VBA-Editor, öffnen Sie unter VBA-Projekt (YourWorkBookName.xlsm) das Microsoft Excel-Objekt und wählen Sie das Blatt aus, auf das sich das Änderungsereignis beziehen soll.
2) Die Standardcodeansicht ist "Allgemein". Wählen Sie in der Dropdown-Liste oben in der Mitte "Arbeitsblatt" aus.
3) Private Sub Worksheet_SelectionChange ist bereits vorhanden, wie es sein sollte, lassen Sie es in Ruhe. Kopieren Sie den Code von Mike Rosenblum von oben und fügen Sie ihn ein. Ändern Sie den .Range-Verweis auf die Zelle, für die Sie nach einer Änderung suchen (in meinem Fall B3). Platzieren Sie Ihr Makro jedoch noch nicht (ich habe das Wort "Makro" nach "Dann" entfernt):
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("H5")) Is Nothing Then
End Sub
oder wählen Sie in der Dropdown-Liste oben links "Ändern" aus und fügen Sie sie in das Feld zwischen "Private Sub" und "End Sub" ein If Not Intersect(Target, Me.Range("H5")) Is Nothing Then
4) Deaktivieren Sie in der Zeile nach "Dann" Ereignisse, damit beim Aufrufen Ihres Makros keine Ereignisse ausgelöst werden, und versuchen Sie, diese Arbeitsblattänderung in einem nie endenden Zyklus erneut auszuführen, der Excel zum Absturz bringt und / oder auf andere Weise alles durcheinander bringt:
Application.EnableEvents = False
5) Rufen Sie Ihr Makro auf
Call YourMacroName
6) Schalten Sie Ereignisse wieder ein, damit die nächste Änderung (und alle anderen Ereignisse) ausgelöst wird:
Application.EnableEvents = True
7) Beenden Sie den If-Block und das Sub:
End If
End Sub
Der gesamte Code:
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
Dadurch werden Ereignisse in den Modulen ein- und ausgeschaltet, was zu Problemen führt und die Änderung einfach auslösen lässt, Ereignisse ausschaltet, Ihr Makro ausführt und Ereignisse wieder einschaltet.