Clever-Excel-Forum

Normale Version: isDate()
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Warum gibt mir im VBA isDate("12,22") true zurück? Wie lässt sich der Wert auf Date richtig prüfen?
Debug.Print CDate("12,22")
Dodgy wie prüfe ich das jetzt auf ein Datum, wo es doch keines dar stellt, sondern einen Geldbetrag...  22
Hi,

wenn keine Beträge über 23743(=1.1.1965) vorkommen, dann prüfe es damit.
Aber ein Betrag von 12,12€ z.B. wird ja als Datum erkannt obwohl es ein Geldbetrag ist. Es soll ja ein Darum ausgeschlossen werden...
Hallo, 19 

wir wissen nicht, was du vorhast. Blush 

Aber du könntest es z. B. so prüfen: 21 

Code:
Dim strTMP As String
strTMP = "12,22"
If IsDate(strTMP) And strTMP Like "##.##" Then MsgBox strTMP & " OK" Else MsgBox strTMP & " Nicht OK"
strTMP = "12.22"
If IsDate(strTMP) And strTMP Like "##.##" Then MsgBox strTMP & " OK" Else MsgBox strTMP & " Nicht OK"

Oder auch so: 21 

Code:
Dim strTMP As String
strTMP = "12,22"
If IsDate(strTMP) And strTMP Like "##.##" Then MsgBox strTMP & " OK" Else MsgBox strTMP & " Nicht OK"
strTMP = "12.22"
If IsDate(strTMP) And strTMP Like "##.##" Then MsgBox strTMP & " OK" Else MsgBox strTMP & " Nicht OK"
strTMP = "12.12.22"
If IsDate(strTMP) And strTMP Like "##.##" Or strTMP Like "##.##.##" Then MsgBox strTMP & " OK" Else MsgBox strTMP & " Nicht OK"
strTMP = "12.12.2022"
If IsDate(strTMP) And strTMP Like "##.##" Or strTMP Like "##.##.##" Or strTMP Like "##.##.####" Then MsgBox strTMP & " OK" Else MsgBox strTMP & " Nicht OK"
strTMP = "12,12.2022"
If IsDate(strTMP) And strTMP Like "##.##" Or strTMP Like "##.##.##" Or strTMP Like "##.##.####" Then MsgBox strTMP & " OK" Else MsgBox strTMP & " Nicht OK"

Oder vielleich auch ganz anders - je nachdem, was du vorhast.

"IsDate" schaut ja nur, ob der Wert in ein Datum konvertiert werden KANN. Und das geht bei "12,12".
(17.06.2022, 19:48)Frogger1986 schrieb: [ -> ]Aber ein Betrag von 12,12€ z.B. wird ja als Datum erkannt obwohl es ein Geldbetrag ist.

IsDate("12,12€") ergibt False!
@Kuwer ja, das gibt false, jedoch werden Beträge nicht mit € eingegeben. Das diente nur der Verdeutlichung! Vielen Dank für die Hilfe, den Ansatz von Case werde ich nutzen, so komme ich weiter!
Hi,

wenn Du auf Value prüfst, dann erhältst Du 12,22
Prüfst Du auf Text, dann erhältst Du 12,22 €
Prüfst Du auf Style, erhältst Du Currency (bei Währung)

Bsp.:
Code:
With Range("F7")
    Debug.print "Style: " & .Style, "Text: " & .Text , "Wert: " & .Value
    If IsDate(.Text) Then
            MsgBox "Datum"
        Else
            MsgBox "Kein Datum"
        End If
End With