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

Forumthread: Prüfen ob alle Textboxen gefüllt

Prüfen ob alle Textboxen gefüllt
02.04.2014 11:48:59
ANNAnas
Hallo Community,
habe folgenden Code:
Private Sub TextBox27_Enter()
Dim objtxt As Object
For Each objtxt In UserForm1.Controls
If TypeName(objtxt) = "TextBox" Then
If objtxt.Value = "" Then
MsgBox " Es wurden nicht alle Textfelder ausgefüllt.!", 48
objtxt.SetFocus
Exit Sub
End If
End If
Next
Nun soll eigentlich die MsgBox anspringen...das passiert leider nicht. Statdessen kommt ein Compilerfehler. Kann mir da einer vielleicht helfen?
Danköööö :)
LG

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Prüfen ob alle Textboxen gefüllt
02.04.2014 11:53:03
Hajo_Zi
benutze das Ereignis Exit.

AW: Prüfen ob alle Textboxen gefüllt
02.04.2014 12:01:00
ANNAnas
Das ist doch an dieser Stelle bereits vorhanden:
Private Sub TextBox27_Enter()
Dim objtxt As Object
For Each objtxt In UserForm1.Controls
If TypeName(objtxt) = "TextBox" Then
If objtxt.Value = "" Then
MsgBox " Es wurden nicht alle Textfelder ausgefüllt.!", 48
objtxt.SetFocus
Exit Sub
End If
End If
Next
End Sub

Anzeige
AW: Prüfen ob alle Textboxen gefüllt
02.04.2014 12:03:45
Hugo

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim objtxt As Object
For Each objtxt In UserForm1.Controls
If TypeName(objtxt) = "TextBox" Then
If objtxt.Value = "" Then
MsgBox " Es wurden nicht alle Textfelder ausgefüllt.!", 48
objtxt.SetFocus
Exit Sub
End If
End If
Next
End Sub

Anzeige
Bei Dir natürlich TextBox27 (und nicht 2)...oT
02.04.2014 12:04:19
Hugo
...

AW: Prüfen ob alle Textboxen gefüllt
02.04.2014 12:22:19
Hajo_Zi
ich sehe da nur das Enter Ereignis.
Gruß Hajo

AW: Prüfen ob alle Textboxen gefüllt
02.04.2014 12:00:41
Hugo
Hallo,
unabhängig davon, dass Exit sicher das geeignetere Ereignis ist, beantwortet Dir Hajo damit nicht Deine eigentliche Frage.
Aber es ist auch schnell geschrieben: Der Code läuft - aber Du muss am Ende natürlich noch End Sub hinzufügen - das Fehlen führt zum Kompilierungsfehler.
Gruß
Hugo

Anzeige
AW: Prüfen ob alle Textboxen gefüllt
02.04.2014 13:02:42
ANNAnas
Danke Hugo :)
nun kommt aber der Laufzeitfehler 2110: Fokus kann nucgt azf das Steuerelement gesetzt werden. Es ist unsichtbar, nicht aktiviert oder von einem Typ der keinen Fokus akzeptiert.
Das bezieht sich auf die selbe Textbox, wo auch die Überprüfung stattfindet. In dieser habe ich aber auch folgenden Code für die Suche:
Private Sub TextBox27_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'Hier wird die Suche in der Tabelle für den Schuss erstellt
If KeyCode = 13 Then
Dim liSuche As Integer, liMsg As Integer, liSuche1 As Integer
For liSuche = 0 To ListBox1.ListCount - 1
For liSuche1 = 0 To ListBox1.ColumnCount - 1
If InStr(1, ListBox1.Column(liSuche1, liSuche), TextBox27.Text) > 0 Then
ListBox1.ListIndex = liSuche
liMsg = MsgBox("Weitersuchen?", vbQuestion + vbYesNo)
If liMsg = vbNo Then Exit Sub
End If
Next
Next
End If
End Sub

Anzeige
AW: Prüfen ob alle Textboxen gefüllt
02.04.2014 13:13:19
ANNAnas
Also vom Prinzip her sollen beide Ereignisse miteinander verknüpft werden:
Private Sub TextBox27_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'Hier wird die Suche in der Tabelle für den Schuss erstellt
If KeyCode = 13 Then
Dim liSuche As Integer, liMsg As Integer, liSuche1 As Integer
For liSuche = 0 To ListBox1.ListCount - 1
For liSuche1 = 0 To ListBox1.ColumnCount - 1
If InStr(1, ListBox1.Column(liSuche1, liSuche), TextBox27.Text) > 0 Then
ListBox1.ListIndex = liSuche
liMsg = MsgBox("Weitersuchen?", vbQuestion + vbYesNo)
If liMsg = vbNo Then Exit Sub
End If
Next
Next
End If
End Sub
Private Sub TextBox27_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim objtxt As Object
For Each objtxt In UserForm1.Controls
If TypeName(objtxt) = "TextBox" Then
If objtxt.Value = "" Then
MsgBox " Es wurden nicht alle Textfelder ausgefüllt.!", 48
Exit Sub
End If
End If
Next
End Sub
Das heißt, dass die Suche erst dann anläuft, sobald alle Textboxen gefüllt sind.
Habt ihr eine Idee wie ich das umsetzen kann?

Anzeige
AW: Prüfen ob alle Textboxen gefüllt
02.04.2014 16:32:05
Hugo
Hallo,
irgendwie ist das alles Stückwerk.
Deine Eingangsfrage ist beantwortet damit, dass Du End_Sub vergessen hast:
Private Sub TextBox27_Enter()
Dim objtxt As Object
For Each objtxt In UserForm1.Controls
If TypeName(objtxt) = "TextBox" Then
If objtxt.Value = "" Then
MsgBox " Es wurden nicht alle Textfelder ausgefüllt.!", 48
objtxt.SetFocus
Exit Sub
End If
End If
Next
End Sub

Eröffnen besser einen neuen Thread für weitere Wünsche.
Gruß
Hugo

Anzeige
AW: Prüfen ob alle Textboxen gefüllt
02.04.2014 16:40:48
ANNAnas
Ok, und danke nochmals Hugo :)

AW: Prüfen ob alle Textboxen gefüllt
02.04.2014 16:41:37
ANNAnas
Closed :)

zu
02.04.2014 17:05:26
robert
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Textboxen in Excel prüfen: So geht's


Schritt-für-Schritt-Anleitung

Um sicherzustellen, dass alle Textboxen in einem UserForm in Excel gefüllt sind, kannst Du den folgenden VBA-Code verwenden. Achte darauf, dass dieser Code in einem UserForm-Modul eingefügt wird.

Private Sub TextBox27_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Dim objtxt As Object
    For Each objtxt In UserForm1.Controls
        If TypeName(objtxt) = "TextBox" Then
            If objtxt.Value = "" Then
                MsgBox "Es wurden nicht alle Textfelder ausgefüllt!", vbExclamation
                objtxt.SetFocus
                Cancel = True ' Verhindert das Verlassen der TextBox
                Exit Sub
            End If
        End If
    Next
End Sub

Dieser Code sorgt dafür, dass beim Verlassen der TextBox überprüft wird, ob alle anderen TextBoxen gefüllt sind. Wenn eine TextBox leer ist, wird eine Meldung angezeigt und der Fokus bleibt auf der leeren TextBox.


Häufige Fehler und Lösungen

  1. Compilerfehler: Wenn Du die Zeile End Sub am Ende Deines Codes vergisst, erhältst Du einen Compilerfehler. Stelle sicher, dass alle Subroutinen korrekt beendet werden.

  2. Laufzeitfehler 2110: Dieser Fehler tritt auf, wenn Du versuchst, den Fokus auf eine unsichtbare oder deaktivierte TextBox zu setzen. Überprüfe, ob die TextBox sichtbar und aktiviert ist.

  3. MsgBox wird nicht angezeigt: Achte darauf, dass Du das Ereignis Exit der TextBox verwendest und nicht Enter, da letzteres nicht die gewünschte Überprüfung beim Verlassen durchführt.


Alternative Methoden

Eine alternative Methode zur Überprüfung der TextBoxen ist die Verwendung des KeyDown-Ereignisses. Hierbei kannst Du die Eingabe in einer TextBox überwachen und die Überprüfung beim Drücken der Enter-Taste durchführen.

Private Sub TextBox27_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 13 Then ' Enter-Taste
        Call TextBox27_Exit(False) ' Aufruf der Exit-Funktion
    End If
End Sub

Diese Methode sorgt dafür, dass die Überprüfung der TextBoxen auch beim Drücken der Enter-Taste erfolgt.


Praktische Beispiele

Wenn Du mehrere TextBoxen hast, kannst Du den obigen Code leicht anpassen, um alle TextBoxen in Deinem UserForm zu überprüfen. Hier ist ein Beispiel, das zwei TextBoxen berücksichtigt:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Call CheckTextBoxes(Cancel)
End Sub

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Call CheckTextBoxes(Cancel)
End Sub

Private Sub CheckTextBoxes(ByVal Cancel As MSForms.ReturnBoolean)
    Dim objtxt As Object
    For Each objtxt In UserForm1.Controls
        If TypeName(objtxt) = "TextBox" Then
            If objtxt.Value = "" Then
                MsgBox "Es wurden nicht alle Textfelder ausgefüllt!", vbExclamation
                objtxt.SetFocus
                Cancel = True
                Exit Sub
            End If
        End If
    Next
End Sub

Tipps für Profis

  • Ereignisse kombinieren: Du kannst das Exit-Ereignis mit dem KeyDown-Ereignis kombinieren, um eine noch robustere Lösung zu erstellen.

  • Benutzerfreundlichkeit: Stelle sicher, dass Deine MsgBox klar und verständlich ist. Verwende eventuell spezifischere Hinweise, um den Nutzern zu helfen.

  • Testen: Teste Deinen Code regelmäßig, um sicherzustellen, dass alle TextBoxen korrekt überprüft werden und keine Laufzeitfehler auftreten.


FAQ: Häufige Fragen

1. Warum funktioniert mein Code nicht?
Überprüfe, ob Du alle erforderlichen End-Sub-Anweisungen hast und dass keine Tippfehler im Code vorhanden sind.

2. Wie kann ich verhindern, dass der Benutzer das UserForm schließt, wenn nicht alle TextBoxen gefüllt sind?
Du kannst eine Überprüfung im QueryClose-Ereignis des UserForms hinzufügen, um sicherzustellen, dass alle TextBoxen gefüllt sind, bevor das Form geschlossen wird.

3. Was mache ich, wenn ich mehr als zwei TextBoxen überprüfen möchte?
Du kannst eine separate Subroutine erstellen, die alle TextBoxen in einer Schleife überprüft, wie im obigen Beispiel gezeigt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige