Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1516to1520
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Userform Textbox Datumsprüfung

Userform Textbox Datumsprüfung
16.10.2016 17:26:59
Peter
Hallo Excelspezialisten,
ich habe über das Archiv eine Lösung gefunden um in der TextBox das Datum zu überprüfen. Hierzu verwende ich folgenden Code:
Private Sub TextBox1_AfterUpdate()
TextBox1 = Format(TextBox1, "dd.mm.yyyy")
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsDate(TextBox1) Then
TextBox1 = ""
Cancel = True
End If
End Sub
Dadurch werden jedoch alle Textboxes und CmdButton gesperrt, bis auf die Listbox.
Es sollen jedoch nur bestimmte Textboxes und CmdButton gesperrt werden. Wie kann ich diese entsperren. Mir fällt keine Lösung ein.
Besten Dank für Eure Hilfe.
Gruss Peter

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform Textbox Datumsprüfung
16.10.2016 17:30:00
Hajo_Zi
Hallo Peter,
ich mache Datum mit folgendem Code.
Option Explicit
Dim BoEnter As Boolean
Private Sub TextBox6_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'   erstellt von HajoZiplies@web.de   Stand 01.08.03
'   Datumseingabe  01.01.03;1.1.03 oder komlettes Jahr
'   Eingabe des Tages und des Monat zweistellig werden die Punkte automatisch gesetzt
'   sie können nur gelöscht durch markierung des punktes und der Zahl davor
'   Buchstaben werden ausgeschlossen, nur Zahlen und Punkt
'   die Überprüfung ob Datum erfolgt in Private Sub TextBox6_AfterUpdate()
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 And BoEnter = False Then TextBox6 = TextBox6 & "."
ElseIf Len(TextBox6) = 5 Then
If Len(TextBox6) - Len(Application.Substitute(TextBox6, ".", ""))  TextBox6 Then
MsgBox "Das Datum wurde übersetzt"
End If
TextBox6 = Format(CDate(TextBox6.Value), "dd.mm.yy")
Else
TextBox6 = ""
End If
BoEnter = False

Anzeige
AW: Userform Textbox Datumsprüfung
16.10.2016 17:36:02
Peter
Hallo Hajo,
besten Dank für Deine schnelle Antwort.
Diesen Code habe ich bereits ausprobiert, bin aber nicht zurecht gekommen. Vielleicht kannst Du mir für mein Problem weiterhelfen.
1. Das Datum besteht aus dd.mm.yyyy
2. Wenn ein Fehler eingetippt wird z. B. beginnend mit , oder . oder ,1 oder .1 dann soll die Eingabe gelöscht werden.
Was muss ich dann an Deinem Code ändern?
Gruss Peter
AW: Userform Textbox Datumsprüfung
16.10.2016 17:40:21
Hajo_Zi
Hallo Peter,
nichts, da dies nicht als erstes Zeichen Eingegeben werden kann.
Gruß Hajo
Anzeige
AW: Userform Textbox Datumsprüfung
16.10.2016 17:48:26
Peter
Hallo Hajo,
stimmt - es werden zuerst die beiden Ziffern für Tag dann zwei für Monat eingegeben und dann aber ebenfalls nur zwei für das Jahr kann dies auf vier Ziffern erweitert werden?
Gruss Peter
AW: Userform Textbox Datumsprüfung
16.10.2016 17:51:18
Hajo_Zi
Hallo Peter,

ich vermute mal ja, aber das ist mir zu aufwendig.
Da Dann auch eine Prüfung ob >1900

Gruß Hajo
AW: Userform Textbox Datumsprüfung
16.10.2016 17:53:01
Peter
Hallo Hajo,
kann ich verstehen. Werde es mal mit Deinem Code probieren.
Wünsche noch einen schönen Sonntag.
Gruss Peter
Anzeige
AW: Userform Textbox Datumsprüfung
16.10.2016 18:07:16
Hajo_Zi
Hallo Peter,
man kann das Datum ja schon mit 4 Jahreszahlen eingeben.
Ohne Prüfung, mur diesen Code ändern.
Private Sub TextBox6_AfterUpdate()
BoEnter = True
If Right(TextBox6, 1) = "." Then TextBox6 = Mid(TextBox6, 1, Len(TextBox6) - 1)
'   Jahreszahl vom aktuellen Jahr ergänzen falls nicht vorhanden
If Len(TextBox6) - Len(Application.Substitute(TextBox6, ".", "")) = 1 Then
TextBox6 = TextBox6 & "." & Year(Date)
End If
If IsDate(TextBox6.Text) Then
If Len(TextBox6) > 8 Then
TextBox6 = Format(CDate(TextBox6.Value), "dd.mm.yyyy")
ElseIf Format(CDate(TextBox6.Value), "dd.mm.yy")  TextBox6 Then
TextBox6 = Format(CDate(TextBox6.Value), "dd.mm.yy")
End If
Else
TextBox6 = ""
End If
BoEnter = False
End Sub

Gruß Hajo
Anzeige
AW: Userform Textbox Datumsprüfung
16.10.2016 18:16:36
Peter
Hallo Hajo,
Danke für Deine Hilfe. Ich habe nach BoEnter "TextBox1 = Format(TextBox1, "dd.mm.yyyy")" eingebaut.
Gleicher Effekt.
Werde nun noch manuell das Sperren und öffnen von Textboxes und CmdButton einbauen.
Nochmals besten Dank und einen schönen Abend.
Gruss Peter
AW: Userform Textbox Datumsprüfung
16.10.2016 18:01:53
Daniel
Hi
das Exit-Event ist so geschrieben, dass die Textbox nur verlassen werden kann, wenn sie ein korrektes Datum enthält.
dafür sorgt das Cancel=True
Soll das so sein?
was soll genau passieren, wenn der Anwender die Textbox verlassen will, ohne ein Datum eingegeben zu haben.
prinzipell würde ich hier auch beide Aktionen (Datum prüfen, Datum in einheitliches Format bringen) in ein Makro packen.
hier mal die Komfort-Variante, bei der der Anwender selbst entscheiden darf.
Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
With TextBox1
If IsDate(.Text) Then
.Text = Format(CDate(.Text), "DD.MM.YYYY")
Else
Select Case MsgBox("Bitte Datum eingeben", vbAbortRetryIgnore)
Case vbAbort
.Text = ""
Case vbRetry
Cancel = True
Case vbIgnore
End Select
End If
End With
End Sub
Gruß Daniel
Anzeige
AW: Userform Textbox Datumsprüfung
16.10.2016 18:17:13
Peter
Hallo Daniel,
Danke für Deine Hilfe.
Ich habe den Code von Hajo, überprüft und festgestelle, dass das mit dem Datum funktionert. Durch Einfügen von "TextBox1 = Format(TextBox1, "dd.mm.yyyy")" nach BoEnter wird das Datum mit vierstelligem Jahr dargestellt und übertragen. Jetzt muss ich nur noch einen Schutz einbauen, dass die Textboxes und Button welche für den Datenübertrag erforderlich sind gesperrt werden und erst nach der Datenprüfung geöffnet werden.
Die war eigentlich der Sinn bei dem vorherigen Code. Es sollen eben nicht alle Button und Textboxes gesperrt werden.
Insoweit werde ich Deinen Vorschlag noch überprüfen.
Gruss Peter
Anzeige
AW: Userform Textbox Datumsprüfung
16.10.2016 18:48:35
Daniel
Hi
in dem Fall würde ich die Buttons immer anklickbar lassen und in den Code des Buttons eine entsprechende Prüfung einbauen, so dass bei einem Klick auf den Button das eigentliche Makro nur dann ausgeführt wird, wenn alle bedingungen erfüllt sind.
dh in das Makro des Buttons kommt dann ein Code in dieser Art:
IF IsDate(Textbox1.Text) Then
hier der Code des Buttons
Else
Msgbox "Bitte Datum in Textbox1 eintragen"
End If
das ist einfacher zu programmieren und viel zuverlässiger.
klar siehts besser aus, wenn der Button erst klickbar wird, wenn alle Daten korrekt eingegeben sind, aber dies zu programmieren wird sehr aufwendig und komplex, vorallem wenn mehrere Steuerelemente überprüft werden müssen und diese auch noch in logischer abhängigkeit von einander stehen (z.B. Textbox1 und Textbox2 müssen ein Datum enthalten, dass Datum in Textbox2 muss grösser sein als Das Datum in Textbox2, oder Textbox2 muss ein Datum enthalten, wenn Checkbox1 gesetzt ist.
Gruß Daniel
Anzeige
AW: Userform Textbox Datumsprüfung
17.10.2016 08:03:32
Peter
Hallo Daniel,
Danke für Deine Antwort.
Ich habe jetzt die Version von Hajo eingebaut und zugleich beim Öffnen die Textboxes und Button für den Buchungszweck auf enabled=False gesetzt. Mit Ende der Prüfung des Datum werden diese auf enabled=True gesetzt. Du schreibst dies ist unzuverlässig. Bisher läuft dies bei mir rund. Wo liegen die Probleme?
Gruss Peter
AW: Userform Textbox Datumsprüfung
17.10.2016 08:48:47
Daniel
Hi
solange du nur eine TextBox überwachen musst, ist das kein Problem.
Problematisch wird's, wenn mehrere Eingabefelder in Kombination relevant sind, dann wird's halt aufwendiger zu Programmieren. Die Prüfung muss für jedes Steuergerät erstellt werden und es wird komplexer.
Dabei schleichen sich eher Programmierfehler ein oder Lücken in der Abfrage, als wenn man nur ein einziges Prüfmakro hat, als wenn man nur ein einziges Makro in einem Steuergerät hat, einfach weil es übersichtlicher ist.
Gruß Daniel
Anzeige
AW: Userform Textbox Datumsprüfung läuft einwandfr
17.10.2016 08:51:47
Peter
Hallo Daniel,
besten Dank für Deine Erläuterung. Dann kann ich meine Einstellungen so belassen wie sie sind.
Sie laufen auch einwandfrei.
Nochmals besten Dank für Deine Hilfe und ich wünsche noch einen schönen Tag.
Gruss Peter

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige