Erkennen ob Text ein Datum ist

24/06/2008 - 11:48 von Peter Schleif | Report spam
Hallo.

Ich arbeite gerade an einer VBA-Funktion die erkennen soll, ob ein
übergebener Text ein gültiges Datum darstellt und es dann formatiert
zurückgibt. Natürlich ist es unmöglich *alle* erdenklichen Formate zu
erkennen, weshalb ich mich zunàchst auf einige typsiche beschrànken
will. Erstaunlicherweise liefert das folgende bereits eine recht gute
Unterscheidung:

IsDate(str) And Not IsNumeric(str)

Das erkennt z.B. das US-Format mit "/", ISO mit 2008-06-24 und auch
"24.Juni 2008". In meinem Test-Code benutze ich für die restlichen
Fàlle einen regulàren Ausdruck. Hauptsàchlich um Eingaben wie 24.6
abzufangen.

Aber so einfach kann es ja wohl nicht sein! Es würde mich daher sehr
freuen, wenn ihr mal einen Blick auf den Code werfen könntet und mir
Eure Meinung sagen würdet. Gerne mit positiver/negativer Kritik.
Test-Daten bei denen der Code versagt sind natürlich besonders
hilfreich - am liebsten mit Verbesserungsvorschlàgen.

Vielen Dank im voraus.

Peter


Sub test()
Dim test_daten As Variant
Dim str As Variant

test_daten = Array( _
"24.6", _
"24.6.208", _
"24.6.2008", _
"4.6.08", _
"06/24/2008", _
"6/24/08", _
"2008-06-24", _
"24.Juni 2008", _
"4.Juni 08")

Debug.Print
Debug.Print "Test-Wert", "Ergebnis", "IsDate", "IsNumeric"
Debug.Print String(60, "-")

For Each str In test_daten
Debug.Print str, get_datum(str), IsDate(str), IsNumeric(str)
Next
End Sub


Function get_datum(ByVal text As String) As String
Static regex As Object

text = Trim(text)

If IsDate(text) And Not IsNumeric(text) Then
get_datum = Format(DateValue(text), "dd/mm/yyyy")
Else
If regex Is Nothing Then
Set regex = CreateObject("VBScript.RegExp")
End If
regex.Pattern = "^(\d{1,2})\.(\d{1,2})\.(\d{4}|\d{2})$"

If regex.test(text) Then
If IsDate(regex.Replace(text, "$1.$2.$3")) Then
get_datum = Format(DateValue( _
regex.Replace(text, "$1.$2.$3")), "dd/mm/yyyy")
End If
End If
End If
End Function
 

Lesen sie die antworten

#1 Thomas Kühn
24/06/2008 - 12:29 | Warnen spam
Hallo Peter,

Eure Meinung sagen würdet. Gerne mit positiver/negativer Kritik.
Test-Daten bei denen der Code versagt sind natürlich besonders
hilfreich - am liebsten mit Verbesserungsvorschlàgen.



Ein Problem wird sicher 01/01/2008 sein da sich ohne
weitere Parameter nicht erkennen làßt, ob es sich um
mm/dd/yyyy oder dd/mm/yyyy handelt.

Gruß Thomas

http://www.thomas-kuehn.de

Ähnliche fragen