Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.06.2025 22:11:12
24.06.2025 21:29:43
24.06.2025 19:48:50
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Rekursiven Aufruf von Ereignissen verhindern

Forumthread: Rekursiven Aufruf von Ereignissen verhindern

Rekursiven Aufruf von Ereignissen verhindern
25.10.2007 10:55:00
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

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Application.EnableEvents = FALSE
25.10.2007 11:14:41
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

Anzeige
AW: Application.EnableEvents = FALSE
25.10.2007 11:30:00
zink
Ja O Elend ... das muss man wissen!
Ganz herzlichen Dank für Deine Hilfe.
Grüße
Joachim

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige