AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 14:55:00
Thomas Ramel
Grüezi Dante
IsDate() funktioniert nur korrekt, wenn die Jahreszahl 4-stellig angegeben wird; ansonsten kann es pssieren, dass aus ja nch Kombination von Tag/Monat/Jahr eine andere Zusammensetzugn generiert wird, die zufällig wieder ein Datum ist.
Ich habe mich unlängst mit diesem Phänomen auseinandergesetzt und auch festgestellt, dass unterschiedliche Ländereinstllungen ebenfalls eine Rolle spielen.
Daher habe ich mit anderen zusammen die folgende Funktin entwickelt, die für alle deutschen Ländereinstllungen funktionieren müsste:
Public Function IstDatum(strDatum As String) As Boolean
'ab xl97
Dim intTag As Integer
Dim intMonat As Integer
Dim intJahr As Integer
Dim strDelim As String
Dim AWF As WorksheetFunction
Set AWF = Application.WorksheetFunction
On Error GoTo Errorhandler
If VBA.Len(strDatum) - VBA.Len(AWF.Substitute(strDatum, ".", "")) = 2 Then
strDelim = "."
ElseIf VBA.Len(strDatum) - VBA.Len(AWF.Substitute(strDatum, "-", "")) = 2 Then
strDelim = "-"
ElseIf VBA.Len(strDatum) - VBA.Len(AWF.Substitute(strDatum, "/", "")) = 2 Then
strDelim = "/"
Else
'IstDatum = False
Exit Function
End If
intTag = CInt(VBA.Left(strDatum, InStr(1, strDatum, strDelim) - 1))
intMonat = CInt(VBA.Mid(strDatum, InStr(1, strDatum, strDelim) + 1, InStr(InStr(1, strDatum, strDelim) + 1, strDatum, strDelim) - InStr(1, strDatum, strDelim) - 1))
intJahr = CInt(VBA.Mid(strDatum, InStr(InStr(1, strDatum, strDelim) + 1, strDatum, strDelim) + 1, 4))
If intMonat > 12 Then Exit Function
IstDatum = Month(DateSerial(intJahr, intMonat, intTag)) = Month(DateSerial(intJahr, intMonat, 1))
Errorhandler:
'Da im Falle eines Fehlers Istdatum nicht 'Wahr' sein kann, reicht es einfach ans Ende der Sub zu springen ;-)
End Function
Code eingefügt mit: Excel Code Jeanie
Mit freundlichen Grüssen
Thomas Ramel
- MVP für Microsoft-Excel -
[Win 2000Pro SP-4 / xl2000 SP-3]