Forumbeitrag
Excel-Version des Fragestellers:
2022
Erfahrungslevel des Fragestellers:
VBA nur mit Recorder
Hi
zu 2.
"Makros anzeigen" zeigt dir die Makros, die du direkt ausführen kannst und darfst, dh sie sind nicht als "Private" deklariert und es wird keine Variablenübergabe benötigt.
Dies ist bei den automatischen Event-Makros aber nicht der Fall, da sie ja über das Event ausgelöst werden und in der Regel eine übergebene Variable haben (z.B Target, welches die geänderte oder selektierte Zelle(n) enthältn
Um zu diesen Makros zu kommen musst du mit der rechten Maustaste auf den Tabellenblattreiter klicken und "Code anzeigen" auswählen.
zu 1.
ja, das Change-Eventmakro springt nur an, wenn du einen Zellinhalt von Hand änderst.
wenn dort eine Formel steht, die neu berechnet wird, dann reagiert Change nicht.
Dafür gibt es das Calculate-Event, dieses wird ausgeführt, wenn auf einem Tabellenblatt ein Zellwert per Formel berechnet wird.
leider kannst du hier nicht ermitteln, welche Zellen neu berechnet wurden und ob sich der Wert auch tatsächlich geändert hat.
ein möglicher Workaround ist, dass du im Change-Event nicht die Zelle mit der Formel überwachst, sondern die Zellen, die das Formelergebnis beeinflussen und von Hand verändert werden.
alternativ kannst du Calculate verwenden, solltest dir aber den alten Zellwert merken, damit dein Makro nicht ständig arbeiten muss, auch wenn sich nichts geändert hat.
Private Sub Worksheet_Calculate()
Static AlterWertA1 As Variant
If Range("A1").Value = AlterWertA1 Then
'--- nichts machen
Else
'--- hier der Code, der ausgeführt werden soll, wenn sich A1 geändert hat
'...
'...
AlterWertA1 = Range("A1").Value
End If
End Sub
eine Static-Variable behält ihren Wert wenn das Makro zu ende ist und hat dann diesen Wert, wenn das Makro neu gestartet wird (normale Variablen sind dann leer und müssen erst gefüllt werden)
dh hier merkst du dir den alten Wert, um zu vermeiden das das Makro unnötig arbeitet, wenn auf dem Blatt eine Neuberechnung stattgefunden hat, ohne dass sich dieser Zellwert dabei verändert hat.
Gruß Daniel