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

Textbox Datumsformat und Punkte vorgeben

Forumthread: Textbox Datumsformat und Punkte vorgeben

Textbox Datumsformat und Punkte vorgeben
06.04.2020 08:51:25
MarC
Guten Morgen alle,
ich möchte gerne die Funktionalität meiner Textbox einschränken. Dass heißt es dürfen bzw. können nur Zahlen eingegeben werden und diese nur im Datumsformat TT.MM.JJJJ. Die Punkte sollten automatisch ergänzt werden. Leider weiß ich nur wie man die Anzahl der Zeichen in einer Textbox begrenzt nicht aber wie man Punkte ergänzen lassen kann geschweige das Format vorgibt.
Würde mir da bitte jemand helfen? Im Internet bin ich noch nicht ganz fündig geworden.
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Textbox Datumsformat und Punkte vorgeben
06.04.2020 09:48:45
MarC
Vielen Dank, euch beiden für die schnelle Hilfe. Ich habe den Code-Teil der für das Datum erforderlich ist kopiert und es funktioniert.
Jetzt haben sich zwei weitere Fragen ergeben. Und zwar wollte ich den Code für mehrere Textboxen hernehmen. Ich hätte aber nicht gedacht das der Code so umfangreich ist. Muss ich die 3 Codebäume (Keypress / Change / AfterUpdate) für jede Textbox schreiben oder kann man das auch mittels schleife lösen? Kann ich die Textboxen in der Schleife ansprechen z.B. Textbox & i oder geht das gar nicht weil der Textboxname ja im Sub steht?
Meine zweite Frage bezieht sich direkt auf dein Beispiel Nepumuk. Wenn die Eingabe des Datums falsch war kommt danach eine msg und wenn ich dann das Datum erneut eingebe werden die Punkte nicht mehr gesetzt. Hast du ein Beispiel bei dem die Punkte selbst nach der falsch Eingabe wieder gesetzt werden?
Anzeige
AW: Textbox Datumsformat und Punkte vorgeben
06.04.2020 10:01:22
Nepumuk
Hallo Marc,
1. Kann ich nicht bestätigen. Wenn ich das falsche Datum lösche und erneut eine Eingabe mache werden die Punkte gesetzt.
2. Das müsstest du über eine Klasse der Textboxen machen. Brauchst du dazu Hilfe?
Gruß
Nepumuk
AW: Textbox Datumsformat und Punkte vorgeben
06.04.2020 10:16:18
MarC
Also das falsche Datum wird automatisch gelöscht und die Maus springt dann die nächste Textbox. Aber wenn ich dann zurück in die erste Textbox gehe werden die Punkte nicht mehr hinzugefügt (bei deinem File nicht bei dem Teil den ich kopiert habe). Ich weiß leider nicht warum es bei mir nicht geht.
Zu Punkt 2 bräuchte ich vielleicht schon Hilfe. Ich habe hier gelernt wie man mehrere Labels und Textboxen in einem Sub mittels schleife anspricht (ein Beispiel):
Dim NewTextBox As MSForms.TextBox
If uf_Edit_Product.Controls.Item(ci).Name = "txtProzess" & ti Then
Aber ich weiß nicht was eine Klasse ist und wie man diese verwendet. Ich google erst mal.
Anzeige
Ich schaff es leider nicht
10.04.2020 20:04:55
MarC
Hallo Nepumuk,
ich weiß leider nicht wie ich den unten aufgeführten Code in für eine Klasse brauchbaren umwandel soll. Der Code soll ja nicht alle Textboxen einschränken sondern nur die Txt_Datum1,2,3,4... usw heißen.
Ich weiß nicht wie ich mich von einem Element spezifischen Sub lösen soll. Deine Beispiele sind interessant aber umsetzen kann ich es leider trotzdem nicht.
Könnte mir jemand hierbei helfen? Vll den Ansatz erklären?

Private Sub Txt_Datum_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case Asc("0") To Asc("9")
Case Asc(".")
If Len(Txt_Datum) = 0 Then
KeyAscii = 0
Else
If Len(Txt_Datum) - Len(Application.Substitute(Txt_Datum, ".", "")) = 2 Then
KeyAscii = 0
ElseIf Len(Txt_Datum) > 1 Then
If Mid(Txt_Datum, Len(Txt_Datum), 1) = "." Then
KeyAscii = 0
End If
End If
End If
Case Else
KeyAscii = 0
End Select
End Sub
Private Sub Txt_Datum_Change()
If Txt_Datum.Tag  "1" = True Then
If Len(Txt_Datum) = 2 Then
If InStr(Txt_Datum, ".") = 0 Then
Txt_Datum = Txt_Datum & "."
End If
ElseIf Len(Txt_Datum) = 4 Then
If Len(Txt_Datum) - Len(Application.Substitute(Txt_Datum, ".", ""))  "." Then
Txt_Datum = Txt_Datum & "."
End If
End If
ElseIf Len(Txt_Datum) = 5 Then
If Len(Txt_Datum) - Len(Application.Substitute(Txt_Datum, ".", ""))  "" Then
MsgBox "kein Datum!!!"
Txt_Datum = ""
End If
End Sub

Anzeige
AW: Textbox Datumsformat und Punkte vorgeben
11.04.2020 11:13:26
Oberschlumpf
Hi MarC,
da du ja eine andere Datei als die von Nepumuk zu nutzen scheinst, wieso zeigst du uns dann nicht mal per Upload - deine - Datei, bzw eine Bsp-Datei mit Bsp-Daten, die aber im Userform vom Aufbau aussieht, wie dein Original?!
Nepumuks Userform enthält 1 Textbox.
Du erzählst, dein Userform enthält mehrere Textboxen.
Zeig bitte eine Datei mit Userform und mehreren Textboxen. Und zeig auch deinen jetzigen Code, mit dem das Ganze noch nicht so ganz funktioniert.
Ciao
Thorsten
Anzeige
AW: Textbox Datumsformat und Punkte vorgeben
11.04.2020 14:55:46
MarC
Hallo Thorsten,
in meinem UserForm befinden sich ca. 40 Textboxen und in 18 davon kommt ein Datum. Diese möchte ich gerne so begrenzen das nur ein Datum eingetragen werden kann (keine Buchstaben, und maximal 10 Stellen). Dank Nepumuks Beispiel Datei funktioniert es für eine TextBox (TextBox4). Jetzt war meine Frage ob ich den Code 18 mal kopieren muss oder es eine andere kürzere Möglichkeit gibt. Mit Klassen sollte es gehen, aber das beherrsche ich null. Wenn es nicht geht kopiere ich halt den Code 18 mal ^^
https://www.herber.de/bbs/user/136641.xlsm
Anzeige
AW: Textbox Datumsformat und Punkte vorgeben
11.04.2020 15:30:01
Nepumuk
Hallo Marc,
warum benutzt du nicht das beispiel aus meinem 2. Post. Da ist eine Klasse und 4 Textboxen drin.
Gruß
Nepumuk
Jetzt funktioniert es THX
11.04.2020 16:23:04
MarC
Hallo Nepumuk,
ich habe dein Beispiel aus dem zweiten Post genommen aber anscheinend habe ich da immer wieder was falsch gemacht. Jetzt habe ich es neu aufgesetzt den Zähler von 4 auf 18 gesetzt die betroffenen Textboxen umbenannt zu TextB und jetzt geht es.
For lngIndex = 1 To 18
Set objTextBoxClass.TextBox = Controls("TextB" & CStr(lngIndex))

Vielen Dank für eure Hilfe und sorry das ich es nicht gleich hinbekommmen habe ka was da war.
Anzeige
Ohne Klassen
11.04.2020 15:53:12
Daniel
Hi
ggf kannst du die Inhalte der Eventmakros in normale Makros bzw Functions umschreiben.
Als Übergabeparameter verwendest du die Übergabeparameter des Events (falls vorhanden) sowie zusätzlich das Steuerelement selbst (Typ Control oder ggf Object)
Im Code verwendest du dann die Übergabevariable anstelle des Steuerelements.
Dann brauchst du zwar immer noch die Eventmakros für jede Textbox, aber diese können deutlich kürzer werden, weil du dort nur noch das Makro bzw die Funktion aufrufen musst.
Wobei ich mir schon überlegen würde, ob soviel Aufwand für ein bisschen Komfort sein muss und ob nicht eine Prüfung am Schluss nach Eingabe aller Werte ausreicht.
Gruß Daniel
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Textbox Datumsformat und Punkte vorgeben


Schritt-für-Schritt-Anleitung

Um das Eingabeformat in einer Excel VBA Textbox so zu gestalten, dass nur das Datumsformat TT.MM.JJJJ zulässig ist und Punkte automatisch ergänzt werden, folge diesen Schritten:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.
  2. Füge ein UserForm hinzu: Klicke auf Einfügen > UserForm.
  3. Füge Textboxen hinzu: Ziehe die TextBox-Steuerelemente auf das UserForm.
  4. Erstelle den Code für die Textboxen: Klicke doppelt auf die TextBox, um den Code-Editor für die TextBox zu öffnen.
  5. Füge den folgenden Code ein:
Private Sub Txt_Datum_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case KeyAscii
        Case Asc("0") To Asc("9")
        Case Asc(".")
            If Len(Txt_Datum) = 0 Then
                KeyAscii = 0
            Else
                If Len(Txt_Datum) - Len(Application.Substitute(Txt_Datum, ".", "")) = 2 Then
                    KeyAscii = 0
                ElseIf Len(Txt_Datum) > 1 Then
                    If Mid(Txt_Datum, Len(Txt_Datum), 1) = "." Then
                        KeyAscii = 0
                    End If
                End If
            End If
        Case Else
            KeyAscii = 0
    End Select
End Sub

Private Sub Txt_Datum_Change()
    If Len(Txt_Datum) = 2 Then
        If InStr(Txt_Datum, ".") = 0 Then
            Txt_Datum = Txt_Datum & "."
        End If
    ElseIf Len(Txt_Datum) = 5 Then
        If Len(Txt_Datum) - Len(Application.Substitute(Txt_Datum, ".", "")) = 1 Then
            Txt_Datum = Txt_Datum & "."
        End If
    End If
End Sub
  1. Teste das UserForm: Schließe den VBA-Editor und teste die Eingabe in deiner UserForm.

Häufige Fehler und Lösungen

  • Fehler: Punkte werden nicht gesetzt: Überprüfe, ob der Code in der KeyPress- und Change-Ereignisprozedur korrekt implementiert ist. Wenn der Code nicht funktioniert, kann es an der Logik liegen, die die Eingabe überprüft.

  • Fehler: Eingabe wird blockiert: Stelle sicher, dass keine anderen Ereignisse oder Validierungen in der TextBox vorhanden sind, die die Eingabe unterbrechen könnten.


Alternative Methoden

Eine alternative Methode zur Eingabe von Datumswerten könnte die Verwendung von Dropdown-Listen zur Auswahl von Tag, Monat und Jahr sein. So kannst du sicherstellen, dass die Eingaben immer korrekt sind.

  • Erstelle drei ComboBoxen für den Tag, Monat und das Jahr.
  • Setze deren Werte vorab, um die Auswahl zu erleichtern.

Praktische Beispiele

Hier ist ein Beispiel, wie du mehrere TextBoxen mit einem einzigen Code ansprechen kannst:

Dim i As Integer
For i = 1 To 18
    Set objTextBox = Me.Controls("Txt_Datum" & i)
    ' Hier kannst du denselben Code wie oben für die TextBoxen anwenden
Next i

Verwende diese Schleife, um den Code für alle TextBoxen zu vereinheitlichen und die Wartung zu erleichtern.


Tipps für Profis

  • Verwenden von Klassen: Wenn du viele TextBoxen hast, erwäge, eine Klasse zu erstellen, die die Logik für die Eingabe und das Format befasst. So kannst du die Wiederverwendbarkeit des Codes erhöhen und die Komplexität reduzieren.

  • Eingabeformat vorgeben: Überlege, ob es sinnvoll ist, das Eingabeformat vorzugeben, z.B. durch eine Formatierungsmethode, die sicherstellt, dass alle Eingaben dem gewünschten Format entsprechen.


FAQ: Häufige Fragen

1. Wie kann ich das Datumsformat für mehrere TextBoxen anwenden?
Du kannst eine Schleife verwenden, um den Code für jede TextBox dynamisch anzuwenden. So musst du den Code nicht für jede TextBox manuell kopieren.

2. Was ist der Vorteil von Klassen in VBA?
Klassen helfen dir, den Code modular zu gestalten, indem sie die Wiederverwendbarkeit erhöhen und die Wartung vereinfachen, besonders bei komplexen Anwendungen mit vielen Steuerelementen.

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