Moin zusammen,
in einem Textfeld stehen Zahlen, Ja/Nein Werte, Datumsangaben oder auch einfach nur Text. Jetzt möchte ich gerne die Datumsangaben (liegen vor als 2018-11-24 oder 24.11.2018) rausfiltern. Dies prüfe ich mit
IsDate([AlterWert])
und Ausgabe
CDate([AlterWert])
Allerdings bekomme ich bei einigen Zahlenwerte Probleme
Z.B. wird
IsDate("4023,3") zeigt True
IsDate("403.2") zeigt True
als Datum erkannt und in
cdate("4023,3") => 01.03.4023
cdate("403.2") => 01.02.403
umgewandelt.
Wer weis rat?
LG
Tom
Zitat von: Tom2002 am November 21, 2018, 07:35:35
in einem Textfeld stehen Zahlen, Ja/Nein Werte, Datumsangaben oder auch einfach nur Text.
Warum ist das so?
Ich würde das ändern und damit Klarheit schaffen.
Ich würde z.B. niemals die Standard Inputbox (wobei ich die grundsätzlich nicht verwende) verwenden um ein Datum abzufragen.
Da bekommt der User ein Kalender Steuerelement - möglicherweise mit eingegrenztem Zeitraum - und damit ist ein gültiges Datum sichergestellt.
Auf IsDate() ist kein Verlaß. Ich würde mich in so einem Fall eher auf einen Regulären Ausdruck (https://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck) verlassen.
Für ein Datum mit den Bindestrichen könnte man
^([0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])$
verwenden und für deutsche Datumsangaben dann
^(3[01]|0[1-9]|[12][0-9])\.(1[0-2]|0[1-9])\.([0-9]{4})$
zusammengefasst:
^((([0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9]))|((3[01]|0[1-9]|[12][0-9])\.(1[0-2]|0[1-9])\.([0-9]{4})))$
In VBA kann dann eine Prüfung auf diese Art geschen (Luftcode):
Dim IstEinDatum As Boolean
'Verweis auf: <Microsoft VBScript Regular Expressions 5.5> setzen
Dim re As RegExp
Set re = New RegExp
re.Pattern = "^((([0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9]))|" & _
"((3[01]|0[1-9]|[12][0-9])\.(1[0-2]|0[1-9])\.([0-9]{4})))$"
IstEinDatum = re.Test(DeinZuPruefenderText)
Hallo Lachtaube,
perfekt, mit RegEx funktioniert es Bestens.
@Markus: Das hätte ich gerne so, aber manchmal ist es halt anders. :-)
LG
Tom
Zitat von: Tom2002 am November 21, 2018, 07:35:35
in einem Textfeld stehen Zahlen, Ja/Nein Werte, Datumsangaben oder auch einfach nur Text. Jetzt möchte ich gerne die Datumsangaben (liegen vor als 2018-11-24 oder 24.11.2018) rausfiltern.
Lachtaube hat schon eine super Lösung gepostet.
Darüber hinaus noch ein genereller Tipp, der nebenbei auch die meisten Inkarnationen deines Problem erschlagen sollte.
Bei einer Datumsvalidierung sollte man auch prüfen, ob das Datum im zulässigen Bereich liegt. So ist z.B. der 15.01.
2108 zwar zweifelsfrei ein gültiges Datum, jedoch mit nahezu absoluter Sicherheit fachlich nicht korrekt, sondern ein trivialer Tippfehler.