Datumseingabe in Userforms automatisieren
Schritt-für-Schritt-Anleitung
Um die Datumseingabe in einem Userform zu automatisieren, kannst du den folgenden VBA-Code verwenden. Dieser Code ermöglicht es dem Benutzer, das Datum im Format ttmmjj
einzugeben, während die Punkte automatisch gesetzt werden.
- Öffne dein Userform in der VBA-Umgebung.
- Doppelklicke auf die Textbox, in der das Datum eingegeben werden soll (z. B.
TextBox6
).
- Füge den folgenden Code in das Codefenster der Textbox ein:
Option Explicit
Dim BoEnter As Boolean
Private Sub TextBox6_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case Asc("0") To Asc("9")
Case Asc(".")
If Len(TextBox6) = 0 Then
KeyAscii = 0
Else
If Len(TextBox6) - Len(Application.Substitute(TextBox6, ".", "")) = 2 Then
KeyAscii = 0
ElseIf Len(TextBox6) > 1 Then
If Mid(TextBox6, Len(TextBox6), 1) = "." Then KeyAscii = 0
Else
KeyAscii = Asc(".")
End If
End If
Case Else
KeyAscii = 0
End Select
End Sub
Private Sub TextBox6_Change()
If BoEnter = True Then Exit Sub
If Len(TextBox6) = 2 Then
If InStr(TextBox6, ".") = 0 Then TextBox6 = TextBox6 & "."
ElseIf Len(TextBox6) = 5 Then
If Len(TextBox6) - Len(Application.Substitute(TextBox6, ".", "")) < 2 Then
TextBox6 = TextBox6 & "."
End If
End If
End Sub
Private Sub TextBox6_AfterUpdate()
BoEnter = True
If Right(TextBox6, 1) = "." Then TextBox6 = Mid(TextBox6, 1, Len(TextBox6) - 1)
If Len(TextBox6) - Len(Application.Substitute(TextBox6, ".", "")) = 1 Then
TextBox6 = TextBox6 & "." & Year(Date)
End If
If IsDate(TextBox6.Text) Then
TextBox6 = Format(CDate(TextBox6.Value), "dd.mm.yy")
Else
TextBox6 = ""
End If
BoEnter = False
End Sub
- Stelle sicher, dass die TextBox in deinem Userform korrekt benannt ist (in diesem Fall
TextBox6
).
- Klicke auf den Button, der die Eingaben übernimmt, und füge den Code zur Verarbeitung des Datums hinzu.
Häufige Fehler und Lösungen
1. Fehler: Das Datum wird nicht korrekt formatiert.
Lösung: Überprüfe, ob der Code in der richtigen TextBox eingefügt wurde und dass die TextBox korrekt benannt ist.
2. Fehler: Punkte werden nicht automatisch gesetzt.
Lösung: Stelle sicher, dass alle Teile des Codes vorhanden sind und dass du den KeyPress
-Ereignis korrekt implementiert hast.
Alternative Methoden
Wenn du eine einfachere Methode bevorzugst, um das Datum zu validieren und zu formatieren, kannst du auch den Exit
-Ereignis der TextBox verwenden:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If InStr(1, TextBox1, ".") Then
MsgBox "Bitte Datum ohne Punkte eingeben!", 64, "Hinweis..."
Exit Sub
Else
If IsNumeric(TextBox1) Then
If IsDate(Format(TextBox1, "00-00-0" & IIf(Len(TextBox1) > 6, "000", "0"))) Then
Sheets(1).[a1] = CDate(Format(TextBox1, "00-00-0" & IIf(Len(TextBox1) > 6, "000", "0")))
End If
End If
End If
End Sub
Praktische Beispiele
Hier sind einige Beispiele, wie du den Code in deinem Userform verwenden kannst:
- Wenn der Benutzer
140305
eingibt, wird automatisch 14.03.2005
formatiert.
- Du kannst die TextBoxen
TextBox6
und TextBox7
nutzen, um zwei Datumswerte zu erfassen.
Tipps für Profis
- Überlege, ob du die Benutzeroberfläche anpassen möchtest, um eine bessere Benutzererfahrung zu bieten.
- Teste den Code gründlich, um sicherzustellen, dass alle möglichen Eingaben korrekt verarbeitet werden.
- Verwende das
Debug.Print
-Kommando, um Fehler während der Entwicklung schneller zu identifizieren.
FAQ: Häufige Fragen
1. Wo muss ich den Code einfügen?
Der Code muss in das entsprechende TextBox-Ereignis innerhalb deines Userforms eingefügt werden.
2. Funktioniert der Code in Excel 2007 und höher?
Ja, der Code sollte in den meisten Excel-Versionen funktionieren, die VBA unterstützen, einschließlich Excel 2003 und höher.
3. Kann ich den Code anpassen?
Ja, du kannst den Code anpassen, um weitere Validierungen oder Formate hinzuzufügen, je nach deinen Anforderungen.