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

Forumthread: Textbox Exit mit Button verlassen

Textbox Exit mit Button verlassen
10.02.2009 13:00:00
WolfgangN
Hallo,
ich habe eine Userform mit einer Textbox, wo ein Datum eingefügt wird. Wenn kein Datum, dann verbleibe in Textbox. Das klappt auch alles sehr gut. Ich suche jetzt aber eine Möglichkeit, wenn kein Datum eingegeben wurde und Button Abbrechen (Unload Userform1) wurde gedrückt, soll Exit verlassen werden und dann Unload Userform1. Das Einfügen von If CommandButton6 =True... bewirkt nichts.
Der User muß erst ein Datum eingeben und kann erst dann Abbrechen drücken.
Wie kann ich mit einem Button die UserForm sofort schließen, wenn ein falsches Datum eingegeben wurde?
Vielen Dank für Euer Interesse und Hilfe.
Gruß
Wolfgang

Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Prüfen, ob Datum in Textbox3
If IsDate(TextBox3) = False Then
MsgBox "Bitte korrektes Datum eingeben"
TextBox3 = ""
'Leider geht es so nicht
If CommandButton6 = True Then Exit Sub
Cancel = True 'Cursor weiterhin in Textbox1 belassen
End If
TextBox3 = Format(TextBox3, "dd.mm.yy")
End Sub



Private Sub CommandButton6_Click()
Unload UserForm1
End Sub


Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Textbox Exit mit Button verlassen
10.02.2009 13:07:00
D.Saster
Hallo,
das Problem ist, dass bei Klick auf Abbrechen erst das Exit-Ereignis der TB eintritt und dann das Klick-Ereignis des Buttons.
Vielleicht solltest du die TB erst bei Klick auf OK prüfen.
Gruß
Dierk
AW: Textbox Exit mit Button verlassen
10.02.2009 13:20:00
WolfgangN
Hallo Dierk,
Danke für Deine Antwort.
Ich habe leider mehrere Textboxen, deshalb will ich sofort beim Verlassen der jeweiligen Textbox eine Prüfung durchführen und diese dann eventuell abbrechen.
Wenn es nicht geht so muß ich es eben so lassen.
Aber eventuell hat noch jemand eine Idee, lasse deshalb Frage offen.
Gruß
Wolfgang
Anzeige
AW: Textbox Exit mit Button verlassen
10.02.2009 13:24:35
ede
Hallo Wolfgang,
mach einen Button für Abrrechen, in welchem Du nichts tusts und einen Button "ok", wo Du die einzelnen TB auf richtigen Inhalt prüftst. !
Somit ersparst Du Dir das TB-Exit ereignis ganz.
Gruss
Danke
10.02.2009 14:56:00
WolfgangN
Hallo ede,
ich belasse es jetzt so wie es ist. Noch einen weiteren Button will ich eigentlich nicht einfügen.
Trotzdem vielen Dank und Gruß
Wolfgang
Anzeige
AW: Textbox Exit mit Button verlassen
10.02.2009 13:23:00
hary
Hallo Wolfgang
versuch mal dies, also eine zweite Box wenn keine Eingabe. Ungetestet!!!

Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim iClick As Integer
'Prüfen, ob Datum in Textbox3
If IsDate(TextBox3) = False Then
MsgBox "Bitte korrektes Datum eingeben"
end if
if TextBox3 = "" then
iClick = MsgBox( prompt:="Was wollen Sie tun",  Buttons:=vbOKCancel)
If iClick = vbOK Then
Deine Anweisung
Else
Deine Anweisung
End If
End if
TextBox3 = Format(TextBox3, "dd.mm.yy")
End Sub


Gruss Hary

Anzeige
Danke und Nachfrage
10.02.2009 14:52:00
WolfgangN
Hallo hary,
habe Deine Variante getestet, wenn ich bei Deiner MsgBox auf Abbrechen drücke und meine Anweisung ausführen lasse.
Else
Unload UserForm1
Exit Sub
End If
wird zwar die UserForm geschlossen, aber Exit Sub wird erst nach einem weiteren Durchlauf ausgeführt,
es erscheinen also die MsgBoxen ohne UserForm und erst dann wird Exit Sub ausgeführt.
Warum das so ist kann ich mir nicht erklären, hast Du eine Erklärung?
Auf jeden Fall ist es nicht das, was ich wollte.
Ich werde es so belassen, wie es ist. Der User muß
also erst ein Datum eingeben und kann auf Abbrechen drücken.
Trotzdem vielen Dank und Gruß
Wolfgang
Anzeige
AW: Nachfrage
11.02.2009 10:01:00
hary
Hallo Wolfgang
Es muesste doch auch nur eine Box reichen oder. Pruefung: wenn leer oder Falsch. Dann brauchst Du auch kein exit.Versuch's mal.

Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim iClick As Integer
'Prüfen, ob Datum in Textbox3
if TextBox3 = "" or IsDate(TextBox3) = False then
iClick = MsgBox( prompt:="Was wollen Sie tun",  Buttons:=vbOKCancel)
If iClick = vbOK Then
Deine Anweisung
Else
Deine Anweisung
End If
End if
TextBox3 = Format(TextBox3, "dd.mm.yy")
End Sub


Gruss Hary

Anzeige
AW: Nachfrage
11.02.2009 11:37:00
WolfgangN
Hallo Hary,
vielen Dank für Deine Hilfe, aber leider komme ich nicht klar. Ich habe mal ein kleines Bsp. nachgebaut.
Das mit der MsgBox ist schon klar, aber er führt meine Anweisung nicht aus. Wäre schön, wenn Du nochmals Hilfe leisten kannst und mir schreibst was ich eingeben muß, damit meine Anweisung ausgeführt wird.
Was ich genau will steht im Code Textbox1 Exit.
Vielen Dank und Gruß
Wolfgang
https://www.herber.de/bbs/user/59344.xls
Anzeige
AW: Nachfrage
11.02.2009 12:42:00
ede
Hallo,
versuchs mal für dein abgestelletes Beispiel so:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim iClick As Integer
'Prüfen, ob Datum in Textbox3
If Not IsDate(TextBox1) Then
TextBox1 = "kein datum bitte erneut eingeben"
End If
TextBox1 = Format(TextBox1, "dd.mm.yy")
[A1] = TextBox1
With TextBox1
.SelStart = 0
.SelLength = Len(TextBox1)
End With
End Sub


Gruss

Anzeige
AW: Nachfrage
11.02.2009 12:56:00
WolfgangN
Hallo ede,
vielen Dank für Deinen Code, leider hilft er auch nicht weiter. Ich möchte, wenn ein falsches Datum eingegeben wurde, dass der User entscheiden kann: Neueingabe oder Abbruch (Schließen der Userform).
Kannst Du nochmal helfen?
Gruß
Wolfgang
AW: Nachfrage
11.02.2009 15:28:00
Original
Hi,
Option Explicit
Dim canExit As Boolean

Private Sub CommandButton1_Click()
Unload Me
End Sub



Private Sub TextBox1_Change()
canExit = Len(TextBox1) = 0
End Sub



Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim iClick As Integer
'Prüfen, ob Datum in Textbox3
If Not canExit Then
If TextBox1 = "" Or IsDate(TextBox1) = False Then
iClick = MsgBox(prompt:="Was wollen Sie tun", Buttons:=vbOKCancel)
If iClick = vbOK Then
'Hier soll Textbox leer werden und Cursor in Textbox bleiben
TextBox1 = ""
Cancel = True
Else
'Hier soll die Userform geschlossen werden, geht so nicht
TextBox1 = ""
Unload UserForm1
End If
End If
TextBox1 = Format(TextBox1, "dd.mm.yy")
[A1] = TextBox1
End If
End Sub



Private Sub UserForm_Initialize()
canExit = True
End Sub


mfg Kurt

Anzeige
Danke
11.02.2009 16:21:00
WolfgangN
Hallo Kurt,
vielen Dank, es klappt super, genau wie ich es wollte.
Ich wollte schon aufgeben und dachte muß der User eben aufpassen.
Es ist perfekt.
Nochmals Danke und einen schönen Tag.
Gruß
Wolfgang
;
Anzeige
Anzeige

Infobox / Tutorial

Textbox Exit in Excel VBA: Userform effizient schließen


Schritt-für-Schritt-Anleitung

  1. UserForm Erstellen: Öffne Excel und gehe zu „Entwicklertools“ > „Visual Basic“. Füge eine neue UserForm hinzu.

  2. Textbox Hinzufügen: Ziehe eine Textbox (z.B. TextBox1) auf die UserForm.

  3. Button Hinzufügen: Füge einen Button (z.B. CommandButton1) hinzu, der die UserForm schließen soll.

  4. Code für TextBox Exit Event: Klicke auf die UserForm und füge den folgenden VBA-Code hinzu:

    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        Dim iClick As Integer
        If TextBox1 = "" Or IsDate(TextBox1) = False Then
            iClick = MsgBox(prompt:="Ungültige Eingabe. Möchten Sie fortfahren?", Buttons:=vbOKCancel)
            If iClick = vbOK Then
                TextBox1 = ""
                Cancel = True
            Else
                Unload Me ' Schließt die Userform
            End If
        End If
        TextBox1 = Format(TextBox1, "dd.mm.yy")
    End Sub
  5. Code für Button: Füge den folgenden Code zum Button hinzu, um die UserForm zu schließen:

    Private Sub CommandButton1_Click()
        Unload Me
    End Sub

Häufige Fehler und Lösungen

  • Fehler: UserForm schließt nicht sofort: Wenn die UserForm nicht sofort schließt, überprüfe, ob der Cancel-Parameter im Exit-Ereignis korrekt gesetzt ist. Du musst sicherstellen, dass Cancel = True gesetzt wird, um den Fokus in der TextBox zu belassen, wenn der Benutzer „OK“ klickt.

  • Fehler: MsgBox erscheint nicht: Achte darauf, dass die Bedingungen für die MsgBox korrekt sind. Es sollte eine Prüfung auf leere Eingaben oder ungültige Daten erfolgen.


Alternative Methoden

Eine andere Methode ist die Verwendung eines speziellen Cancel-Buttons, der keine weiteren Aktionen durchführt, und eines OK-Buttons, der die Validierung der Eingaben durchführt. Diese Trennung kann das Management der Events vereinfachen und verhindern, dass das exit-Ereignis vor dem Klick-Ereignis des Buttons ausgelöst wird.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie die UserForm mit einer TextBox und einem Cancel-Button aussehen könnte:

Private Sub CommandButtonCancel_Click()
    Unload Me ' Dieser Button schließt die UserForm
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Not IsDate(TextBox1) Then
        MsgBox "Bitte ein gültiges Datum eingeben."
        Cancel = True ' Cursor bleibt in der TextBox
    End If
End Sub

Tipps für Profis

  • Nutze die excel vba textbox exit event, um Eingaben in Echtzeit zu überprüfen, und plane die Handhabung von Fehlerfällen im Voraus.
  • Halte den Code modular und nutze separate Subroutinen für verschiedene Validierungslogiken.
  • Berücksichtige die Benutzerfreundlichkeit: Eine klare Anleitung in der MsgBox verbessert die Nutzererfahrung.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass der Benutzer ein Datum eingibt?
Verwende die IsDate-Funktion innerhalb des Exit-Events der TextBox, um zu prüfen, ob die Eingabe gültig ist.

2. Was passiert, wenn ich Unload Me in der TextBox Exit-Routine verwende?
Das Schließen der UserForm kann dazu führen, dass das Exit-Ereignis nicht korrekt verarbeitet wird. Stelle sicher, dass die Logik dies berücksichtigt, um unerwartete Ergebnisse zu vermeiden.

3. Gibt es einen Unterschied zwischen Unload UserForm1 und Unload Me?
Unload Me bezieht sich auf die aktuelle UserForm, während Unload UserForm1 auf eine spezifische UserForm verweist. Verwende Unload Me für bessere Wartbarkeit des Codes.

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