Eure Meinung zu Application.EnableEvents

15/02/2008 - 17:43 von Peter Schleif | Report spam
Hallo.

Ich wollte Euch mal um Eure Meinung zum Thema "EnableEvents" bitten.
Hier wurde ja schon öfters mit Application.EnableEvents=False
gearbeitet.

Ich bin kein Freund dieser Anweisung und finde sie gefàhrlich, weil
die Events-Verarbeitung im Zustand False zurückbleiben kann, wenn
zwischen den beiden Anweisungen ein Fehler auftritt. Hier ein
konstruiertes, sinnfreies Beispiel:

@Perry: Dies ist ein Beispiel :-)

Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False
Target.Offset(-1, 0) = Target
Application.EnableEvents = True

End Sub

Solange nur Werte ab Zeile 2 geàndert werden ist alles okay. Wird aber
ein Wert in Zeile 1 geàndert, erzeugt der Code einen Laufzeitfehler.
Nach dem Abbrechen der Prozedur funktionieren aber auch Eingaben ab
Zeile 2 nicht mehr, weil EnableEvents immer noch auf False steht. Bei
unerfahrenen Usern kann das zu einer langwierigen Fehlersuche führen,
weil "gar nichts mehr passiert" [Zitat].


Ich bevorzuge folgende Lösung, die ohne EnableEvents auskommt. Der
Fehler tritt natürlich trotzdem auf. Aber danach kann man noch
weiterarbeiten.

Private Sub Worksheet_Change(ByVal Target As Range)

Static selbstaufruf As Boolean

If selbstaufruf Then
Exit Sub
End If

selbstaufruf = True
Target.Offset(-1, 0) = Target
selbstaufruf = False

End Sub


Wie ist eure Meinung zum Thema EnableEvents?
Wie geht ihr damit um?
Wie sehen eure Strategien diesbezüglich aus?

Peter
 

Lesen sie die antworten

#1 Thomas Ramel
15/02/2008 - 17:57 | Warnen spam
Grüezi Peter

Peter Schleif schrieb am 15.02.2008

Ich wollte Euch mal um Eure Meinung zum Thema "EnableEvents" bitten.
Hier wurde ja schon öfters mit Application.EnableEvents=False
gearbeitet.

Ich bin kein Freund dieser Anweisung und finde sie gefàhrlich, weil
die Events-Verarbeitung im Zustand False zurückbleiben kann, wenn
zwischen den beiden Anweisungen ein Fehler auftritt.



Mit einer geeigneten Fehler-Behandlung kann man das ebenso elegant lösen:



Private Sub Worksheet_Change(ByVal Target As Range)



On Error Goto ErrorHandler

Application.EnableEvents = False
Target.Offset(-1, 0) = Target



ErrorHandler:
Application.EnableEvents = True
End Sub



So wird das Einschalten der Events sichergestellt - ob mit oder ohne
Fehler.

Wie ist eure Meinung zum Thema EnableEvents?
Wie geht ihr damit um?
Wie sehen eure Strategien diesbezüglich aus?



Reichen die obigen Zeilen als Erklàrung aus?


Mit freundlichen Grüssen
Thomas Ramel

- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-2]
Microsoft Excel - Die ExpertenTipps

Ähnliche fragen