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
-
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.
-
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.
-
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.