Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
916to920
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
916to920
916to920
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

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

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

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige