Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: "LostFocus" für Textbox auf Userform

"LostFocus" für Textbox auf Userform
Florian
Hallo!
Ich schlage mich mit folgendem Problem herum:
Ich möchte, dass beim Verlassen einer Textbox, die sich auf einer UserForm befindet, überprüft wird, ob die vom User eingegebenen Werte korrekt sind, wenn nicht soll eine Message-Box mit einer Fehlermeldung erscheinen.
Dabei habe ich bis jetzt folgende Ereignisse getestet - mit allen hatte ich meine probleme:
TextBox_Change(): ist zu "aggressiv", der User wird bereits während der Eingabe unterbrochen und nicht erst, wenn er die Box verläßt.
TextBox_Exit(): reagiert nur, wenn der User auf ein Element den Focus liegt, welches sich im gleichen Frame wie die Textbox befindet.
TextBox_BeforeUpdate(...): reagiert immer, allerdings erscheint meine Msgbox-Fehlermeldung 2 mal, wenn der Focus auf ein Element ausserhalb des Textbox-Frames gelegt wird.
TextBox_LostFocus(): gibt es auf UserForms anscheinend nicht.
Weiss jemand einen Rat bzw. ein passendes Ereignis mit dem ich mein Problem beheben kann.
Viele Grüsse,
Florian
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: "LostFocus" für Textbox auf Userform
soendi
probiers mal mit TextBox_AfterUpdate
gruss
soendi
AW: "LostFocus" für Textbox auf Userform
Florian
...TextBox_AfterUpdate () ist besser,danke,aber ich kann nicht verhindern (zb. mit TextBox.setfocus) dass die Textbox den Focus verliert, was unbedingt sein sollte.
Gruss,
Florian
AW: "LostFocus" für Textbox auf Userform
05.04.2004 19:44:38
soendi
also...

Sub TextBox1_AfterUpdate()
If TextBox1 = "" Then TextBox1.SetFocus
End Sub
()
wie wärs damit?
gruss
soendi
Anzeige
umgekehrt gedacht
soendi
hallo florian!
denk mal von hinten her und check nicht die AKTUELLE box.
du hast ein textbox_enter-ereignis, das du für das benutzen kannst:
a) wenn tb2_enter, dann wird gecheckt, ob tb1 = nix, wenn das der fall ist, gehts zurück nach tb1.
b) wenn tb1 = etwas und tb2 = nix, kannst du nicht nach tb3.
c) wenn du aber direkt tb3 fokussieren würdest, kann ja, da tb2 mit dem ersten makro unantastbar ist, nicht zurückfokussiert werden... --> würde buggen, die sache. deshalb das goto.
gruss
soendi
-------------------------------------------------

Private Sub TextBox2_Enter()
If TextBox1.Value = "" Then TextBox1.SetFocus
End Sub

-------------------------------------------------

Private Sub TextBox3_Enter()
If TextBox1.Value = "" Then GoTo TB1 Else GoTo TB2
TB1:
TextBox1.SetFocus
GoTo Ende
TB2:
If TextBox2.Value = "" Then TextBox2.SetFocus
Ende:
End Sub

-------------------------------------------------
Anzeige
AW: umgekehrt gedacht
PeterW
Hallo,
wie wäre es statt GoTo mit Select Case zu arbeiten?
Gruß
Peter
AW: umgekehrt gedacht
soendi
ja, ist sicherlich auch möglich.
bin aber recht goto-fixiert. (ich kenn noch nix anderes, bilde mich aber gerne fort)
gruss
soendi
AW: umgekehrt gedacht
PeterW
Hallo,
genau diesem Zweck (Fortbildung) diente mein Hinweis. :-)
Gruß
Peter
Anzeige
AW: umgekehrt gedacht
Florian
...hab mich für AfterUpdate()entschieden,danke für die Hilfe:-)
Florian
;
Anzeige
Anzeige

Infobox / Tutorial

"LostFocus" für Textbox auf Userform in Excel VBA


Schritt-für-Schritt-Anleitung

  1. UserForm erstellen: Öffne dein Excel VBA-Editor (ALT + F11) und füge eine UserForm hinzu.

  2. Textbox hinzufügen: Ziehe eine Textbox auf die UserForm.

  3. Nach dem Verlassen der Textbox prüfen:

    • Klicke doppelt auf die Textbox, um den Code-Editor zu öffnen.
    • Verwende das AfterUpdate-Ereignis, um zu prüfen, ob die Eingabe leer ist:
    Private Sub TextBox1_AfterUpdate()
       If TextBox1.Value = "" Then
           MsgBox "Bitte füllen Sie das Feld aus.", vbExclamation
           TextBox1.SetFocus
       End If
    End Sub
  4. Fokus auf die Textbox setzen: Wenn die Eingabe ungültig ist, wird die Textbox erneut fokussiert.


Häufige Fehler und Lösungen

  • Textbox verliert den Fokus unerwartet: Stelle sicher, dass du in den Events wie TextBox_AfterUpdate() den Fokus mit SetFocus zurücksetzt.

  • Doppelte Fehlermeldungen: Dies kann passieren, wenn du das BeforeUpdate-Ereignis verwendest. Nutze stattdessen AfterUpdate, um die Eingabe erst nach dem Verlassen der Textbox zu prüfen.

  • Event wird nicht ausgelöst: Vergewissere dich, dass die Textbox richtig benannt ist und das Event korrekt zugeordnet wurde.


Alternative Methoden

  • Textbox_Enter-Ereignis: Du kannst auch das Enter-Ereignis nutzen, um zu prüfen, ob die vorherige Textbox gültige Eingaben hat. So kannst du den Benutzer zurück zur ersten Textbox führen, falls eine Eingabe fehlt:

    Private Sub TextBox2_Enter()
       If TextBox1.Value = "" Then
           TextBox1.SetFocus
       End If
    End Sub
  • Select Case verwenden: Statt GoTo kannst du das Select Case für eine bessere Lesbarkeit verwenden. Beispiel:

    Private Sub TextBox3_Enter()
       Select Case True
           Case TextBox1.Value = "": TextBox1.SetFocus
           Case TextBox2.Value = "": TextBox2.SetFocus
       End Select
    End Sub

Praktische Beispiele

  • Beispiel 1: Eingabeüberprüfung: Nutze AfterUpdate, um sicherzustellen, dass alle Textboxen ausgefüllt sind, bevor der Benutzer zur nächsten Textbox wechselt.

  • Beispiel 2: Fehlerbehandlung: Bei falschen Eingaben eine Fehlermeldung anzeigen und den Fokus zurück zur Textbox setzen.


Tipps für Profis

  • Nutze Private Sub für die Ereignisse, um die Sichtbarkeit der Prozeduren zu steuern.
  • Teste deine UserForm regelmäßig, um sicherzustellen, dass alle Events wie gewünscht funktionieren.
  • Implementiere Error Handling, um unerwartete Probleme beim Fokussieren von Textboxen zu vermeiden.

FAQ: Häufige Fragen

1. Wie setze ich den Fokus auf eine Textbox?
Verwende TextBoxName.SetFocus im entsprechenden Ereignis, um den Fokus auf die gewünschte Textbox zu setzen.

2. Was ist der Unterschied zwischen BeforeUpdate und AfterUpdate?
BeforeUpdate prüft die Eingabe bevor die Textbox den Fokus verlässt, während AfterUpdate nach dem Verlassen reagiert. Für die Überprüfung nach dem Verlassen ist AfterUpdate die bessere Wahl.

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