|
Die Visual Basic-Funktion IsDate prüft, ob der ihr übergebene Parameter entweder einen Wert des Datentyps Date enthält, oder ob er einen String enthält, der in ein Datum konvertiert werden kann. Liegt ein Datum nach Anwendereingaben in separaten Feldern bzw. Variablen vor (etwa Jahr, Monat und Tag), müssen Sie erst ein Datum aus den Feldern zusammensetzen, um es von IsDate prüfen lassen zu können.
Ein anderer Gedanke wäre, die Funktion DateSerial zur Fehlerprüfung zu verwenden und ihr dazu einfach die Feldwerte zu übergeben. Doch die Hoffnung trügt - DateSerial schluckt so ziemlich alles an Werten und macht "irgendein" Datum daraus. So liefert DateSerial(-1, -1, -1) den 30.10.1998. Und auf den Versuch, DateSerial einen 29. Februar 2001 unterzuschieben, erfolgt auch keine Reklamation. Es wird einfach der 1. März 2001 angenommen und zurückgegeben. Auch ein 13. oder gar 20. Monat bleibt unbeanstandet - DateSerial rechnet die Zeitdistanz einfach wieder in ein gültiges Datum um.
Die hier gezeigt Funktion ValidDateSerial lässt sich hingegen nicht austricksen. Zwar wird wieder zunächst per DateSerial "irgendein" Datum erzeugt. Doch anschließend wird umgekehrt unter Verwendung der VB-Funktionen Year, Month und Day geprüft, ob die einzelnen Bestandteile noch mit den übergebenen Teilen übereinstimmen. Ist das der Fall, wurden gültige Datumsbestandteile übergeben und das Datum wird als Datentyp Date zurückgegeben. Anderenfalls wird der Fehler ErrInvalidDate ausgelöst.
Public Enum ErrValidDateSerialConstants
ErrInvalidDate = vbObjectError + 30000
End Enum
Public Function ValidDateSerial(ByVal Year As Integer, _
ByVal Month As Integer, ByVal Day As Integer) As Date
Dim nDate As Date
On Error Resume Next
nDate = DateSerial(Year, Month, Day)
If Err.Number = 0 Then
If VBA.Year(nDate) = Year Then
If VBA.Month(nDate) = Month Then
If VBA.Day(nDate) = Day Then
ValidDateSerial = nDate
Exit Function
End If
End If
End If
End If
On Error GoTo 0
Err.Raise ErrInvalidDate, "ValidDateSerial"
End Function
|