Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: TextBox - Exit-Ereignis

TextBox - Exit-Ereignis
03.02.2022 12:28:41
{Boris}
Hallo zusammen,
gegeben: Userform mit 3 Textboxen: Textbox1, Textbox2 und Textbox3 sowie 1 Commandbutton.
https://www.herber.de/bbs/user/150831.xlsm
Bei folgendem Code für Textbox1 wird das Exit-Ereignis 2 mal ausgeführt (die MsgBox erscheint 2 mal) - das liegt offensichtlich an der letzten Zeile, die Textbox3 zu "fokussieren", denn ohne dies wird nur 1 mal ausgeführt.

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
MsgBox "Du verlässt Textbox1"
Me.TextBox3.SetFocus
End Sub
Außerdem funktioniert bei aktiver Textbox1 der "Schließen-Button" nur, wenn die TakeFocusOnClick-Eigenschaft des Buttons auf False steht.

Private Sub CommandButton1_Click()
Unload Me
End Sub
Was passiert da genau im Exit-Ereignis?
VG, Boris
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: TextBox - Exit-Ereignis
03.02.2022 13:20:01
Rudi
Hallo Boris,
durch SetFocus wird _Exit erneut ausgelöst.
Ebenso durch den Klick auf Verlassen.
Nimm _AfterUpdate.

Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub TextBox1_AfterUpdate()
MsgBox "Du verlässt Textbox1"
TextBox3.SetFocus
End Sub
Gruß
Rudi
Anzeige
Danke Dir...
03.02.2022 19:03:26
{Boris}
Hi Rudi,

durch SetFocus wird _Exit erneut ausgelöst.
Gemerkt habe ich es ja - aber verstehen tu ich es grad immer noch nicht wirklich...
Aber egal - AfterUpdate passt! Danke!
VG, Boris
;
Anzeige
Anzeige

Infobox / Tutorial

TextBox Exit-Ereignis in VBA verstehen


Schritt-für-Schritt-Anleitung

  1. Öffne die Userform in Excel, die die Textboxen enthält.
  2. Füge den folgenden VBA-Code in das Codefenster der Userform ein, um das Exit-Ereignis für die Textbox zu implementieren:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    MsgBox "Du verlässt Textbox1"
    Me.TextBox3.SetFocus
End Sub
  1. Teste die Funktionalität: Wenn Du die Textbox verlässt, sollte die Meldung erscheinen. Beachte, dass das Exit-Ereignis hier zweimal ausgelöst wird, wenn SetFocus verwendet wird.
  2. Ändere den Code in das AfterUpdate-Ereignis, um das Problem mit dem doppelten Auslösen zu vermeiden:
Private Sub TextBox1_AfterUpdate()
    MsgBox "Du verlässt Textbox1"
    TextBox3.SetFocus
End Sub
  1. Füge den Code für den Schließen-Button hinzu:
Private Sub CommandButton1_Click()
    Unload Me
End Sub

Häufige Fehler und Lösungen

  • Problem: Das Exit-Ereignis wird doppelt ausgeführt.
    Lösung: Verwende AfterUpdate statt Exit, um das unerwünschte Verhalten zu verhindern.

  • Problem: Der "Schließen-Button" funktioniert nicht.
    Lösung: Stelle sicher, dass die TakeFocusOnClick-Eigenschaft des Buttons auf False gesetzt ist.


Alternative Methoden

Eine alternative Methode zur Handhabung von Textbox-Ereignissen ist die Verwendung von Validierung. Du kannst die Benutzer Eingaben in der Textbox überprüfen, bevor sie die Textbox verlassen:

Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox1.Text = "" Then
        MsgBox "Die Textbox darf nicht leer sein!"
        Cancel = True
    End If
End Sub

Praktische Beispiele

Hier ist ein praktisches Beispiel, wie Du eine Userform mit mehreren Textboxen und einem Schließen-Button erstellen kannst:

Private Sub UserForm_Initialize()
    TextBox1.Value = ""
    TextBox2.Value = ""
    TextBox3.Value = ""
End Sub

Private Sub TextBox1_AfterUpdate()
    MsgBox "Du verlässt Textbox1"
    TextBox3.SetFocus
End Sub

Private Sub CommandButton1_Click()
    Unload Me
End Sub

Tipps für Profis

  • Nutze das BeforeUpdate-Ereignis, um eine Validierung der Benutzereingaben durchzuführen, bevor der Fokus auf eine andere Textbox gesetzt wird.
  • Verwende Error Handling in Deinem VBA-Code, um unerwartete Fehler elegant zu handhaben.
  • Experimentiere mit verschiedenen Steuerelementen in Userforms, um die Benutzererfahrung zu verbessern.

FAQ: Häufige Fragen

1. Warum wird das Exit-Ereignis doppelt ausgelöst?
Das Exit-Ereignis wird doppelt ausgelöst, weil das Setzen des Fokus auf eine andere Textbox das Exit-Ereignis erneut auslöst. Verwende stattdessen AfterUpdate.

2. Wie verhindere ich, dass eine Textbox leer bleibt?
Nutze das BeforeUpdate-Ereignis, um zu überprüfen, ob die Textbox leer ist, und zeige eine Fehlermeldung an, falls dies der Fall ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige