Die IsDate-Funktion von VBA sagt Ihnen angeblich, ob eine Textzeichenfolge als Datum interpretiert werden kann. Alle folgenden Ausdrücke werden beispielsweise zu True ausgewertet:
IsDate("25.05.2015")
IsDate(„16. Januar“)
IsDate("12-1")
IsDate("12/1/15")
IsDate(“2/30”)
IsDate("30/2")
Beachten Sie in den letzten beiden Beispielen, dass IsDate bei der Reihenfolge des Tages und des Monats nicht wählerisch ist. Beide Zeichenfolgen können als Datum interpretiert werden, sodass IsDate True zurückgibt (unabhängig von Ihren Systemeinstellungen für das Datumsformat).
Hier sind einige Informationen aus einem Microsoft Support-Artikel :
Die VBA-Datumsfunktionen IsDate, Format, CDate und CVDate verwenden eine Funktion aus der OLE-Automatisierung (OleAut32.dll). Diese Funktion durchsucht alle möglichen Datumsformate, indem sie jeden der getrennten Werte in der Zeichenfolge, die das Datum darstellt, tokenisiert und einen booleschen Wert zurückgibt, der angibt, ob die Eingabe als Datum dargestellt werden kann.
Dies ist wichtig, wenn Sie die Funktion verwenden, um ein Datum zu interpretieren, das eine zweistellige Jahreszahl enthält. Verschiedene Gebietsschemas verwenden verschiedene Datumsformate (d. h. mm/tt/jj, jj/mm/tt, „ TT MMM JJ “ , „ JJ MMM TT “ usw.) Funktion hat ein gültiges Datum gefunden oder alle Möglichkeiten ausgeschöpft.
Nur weil IsDate eine Zeichenfolge als Datum erkennt, bedeutet dies nicht, dass die Zeichenfolge zuverlässig in ein Datum konvertiert werden kann. In einigen Fällen ist das Ergebnis mehrdeutig. Was ist zum Beispiel mit diesem Ausdruck?
IsDate("29-Feb-01")
Der 29. Februar 2001 ist kein gültiges Datum. Dieser Ausdruck gibt jedoch True zurück, da der 1. Februar 1929 (und der 2. Januar 1929) gültige Datumsangaben sind. Und so sind die gleichen Daten im Jahr 2029.
Eine Suche nach der IsDate-Dokumentation blieb leer. Basierend auf Tests akzeptiert IsDate eines der folgenden als Trennzeichen: einen Schrägstrich (/), einen Bindestrich (-), ein Komma (,), einen Punkt (.) und ein Leerzeichen.
Daher geben die folgenden Ausdrücke alle True zurück:
IsDate("5.1")
IsDate("30 6")
IsDate(“30,6”)
IstDatum("1/2")
Aber dann gibt es diese Anomalie: Die folgenden Ausdrücke geben True zurück:
IsDate("5.1.5")
IsDate("5.1.05")
Dieser Ausdruck gibt jedoch unausdrücklich False zurück:
IsDate("5.1.2005")
Angenommen, Sie haben eine UserForm mit einer InputBox erstellt, in die der Benutzer ein Datum eingibt. Es sollte klar sein, dass die Verwendung von IsDate zum Überprüfen des Eintrags nicht sehr zuverlässig ist.
Noch verwirrender wird es, wenn Sie feststellen, dass IsDate auch Zeitwerte abdeckt. (Es gibt keine entsprechende IsTime-Funktion.) Die folgenden Ausdrücke geben also alle True zurück:
IsDate("4:45")
IsDate("4.45")
IsDate("4 45")
IsDate("4/45")
IsDate("23:59")
Diese Ausdrücke geben False zurück:
IsDate("4:60")
IsDate("24.45")
Es ist wichtig, darauf hinzuweisen, dass IsDate nicht alle diese Eigenheiten aufweist, wenn Sie ein Range-Argument übergeben. Zum Beispiel:
IsDate(Bereich(“A1”))
Es scheint, dass IsDate absolut zuverlässig bei der Identifizierung von Zellen ist, die ein Datum oder eine Uhrzeit enthalten. Es identifiziert beispielsweise keine Zelle, die 5.1 als Datum enthält. Wenn Ihr Code ermitteln muss, ob eine Zeichenfolge als Datum interpretiert werden kann, besteht die beste Lösung darin, diese Zeichenfolge in eine Zelle einzufügen und dann Code zu schreiben, um den Zellinhalt zu überprüfen.