HERBERS Excel-Forum - das Archiv
Rekursiven Aufruf von Ereignissen verhindern
Ereignissen

Hallo, liebe Forumsmitglieder,
ich habe eine Frage zum Ausschalten der Ereignisbehandlung (Application.EnableEvents=False).
Auf einer Userform befindet sich eine Textbox , die Eingaben entgegennimmt. Ich verwende das Change-Ereignis, um fehlerhafte Eingaben zu korrigieren.
Wenn ich in der Change-Ereignisprozedur den Wert der Textbox ändere (korrigiere), wird das Ereignis erneut augerufen (Rekursion) - dies will ich mit "Application.EnableEvents=False" verhindern.
Im folgenden Beispiel soll bei Eingabe eines Punktes dieser durch einen Strich ausgetauscht werden - dies funktioniert auch, aber das Change-Ereignis wird rekursiv aufgerufen, obwohl ein "Application.EnableEvents=False" gegeben wurde. Man sieht das im Einzelschrittmodus.
Warum funktioniert das Ausschalten der Ereignisbehandlung hier nicht? Dies trifft auch für die anderen Ereignisse (KeyUP, KeyDown etc.) zu.
Dass die Ereignisroutine nach Abschalten der Ereignisbehandlung dennoch erneut aufgerufen wird, ist doch eigentlich "gegen die guten Sitten" - ich versteh's nicht.
Kann mir jemand erklären, was ich hier falsch mache?


Private Sub TextBox1_Change()
If Right(Me.TextBox1, 1) = "." Then
Application.EnableEvents = False
Me.TextBox1 = Left(Me.TextBox1, Len(Me.TextBox1) - 1) & "-"
Application.EnableEvents = True
End If
End Sub


Danke für Eure Hilfe
und freundliche Grüße
Joachim

Application.EnableEvents = FALSE
NoNet

Hallo Joachim,
Die Anweisung "Application.EnableEvents = FALSE" gilt leider nicht für Steuerelemente in einem UserForm !
Dazu musst Du eine Boole'sche Variable deklarieren, deren Wert Du prüfst und während des Ereignisses änderst :
Dim bolModus As Boolean
Private Sub TextBox1_Change()
    If Not bolModus Then
        bolModus = True
        If Right(Me.TextBox1, 1) = "." Then
           Application.EnableEvents = False
             Me.TextBox1 = Left(Me.TextBox1, Len(Me.TextBox1) - 1) & "-"
           Application.EnableEvents = True
        End If
    End If
    bolModus = False
End Sub
Gruß, NoNet

AW: Application.EnableEvents = FALSE
zink

Ja O Elend ... das muss man wissen!
Ganz herzlichen Dank für Deine Hilfe.
Grüße
Joachim