Rubrik: Datum/Zeit und Timer · Datums- und Zeitfunktionen | VB-Versionen: VB4, VB5, VB6 | 17.07.01 |
Datumseingaben auf Plausibilität prüfen Eine Universalroutine zum Prüfen von Datumseingaben auf Plausibilität. | ||
Autor: Dieter Otter | Bewertung: | Views: 39.991 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
In vielen Anwendung werden Felder für Datumseingaben benötigt. Sinnvoll ist es natürlich das Datum beim Verlassen des Eingabefeldes automatisch auf Plausibilität zu prüfen. Die Prüfung sollte zum einen das korrekte Format (tt.mm.jjjj), sowie die korrekten Angaben für Tag und Monat umfassen. Schön wäre es dann noch, wenn man auch zweistellige Jahresangaben vornehmen könnten und die Anwendung diese dann automatisch in die vierstellige Angabe umwandelt. Eine weitere Arbeitserleichterung für den Anwender wäre es auch, wenn keine Punkte eingegeben werden müssen - oder daß automatisch ein Punkt dargestellt wird, wenn man im Nummerblock der Tastatur das Komma drückt.
Der nachfolgende Tipp beherrscht alle o.g. Features und lässt sich ganz leicht in die eigene Anwendung einbinden.
Tastatureingaben prüfen
' Tasten Private Sub txtDatum_KeyPress(KeyAscii As Integer) Select Case KeyAscii ' zulässige Tasten: 0-9, Punkt, Space und Backspace Case 48 To 57, 8, 32, 46 ' Komma automatisch in Punkt umwandeln Case 44 KeyAscii = 46 ' Alle anderen Tasten ignorieren Case Else KeyAscii = 0 End Select End Sub
Prüfung beim Verlassen des Eingabefeldes
' Datum-Prüfroutine aufrufen Private Sub txtDatum_LostFocus() Dim sDatum As String sDatum = CheckDatum(txtDatum.Text) If sDatum <> "" Then txtDatum.Text = sDatum End Sub
Universelle Datum-Prüfroutine
' Datum aus Plausibilität prüfen ' Rückgabewert: formatierte Datumsangabe oder Leerstring, ' wenn ungültiges Datum Public Function CheckDatum(ByVal Datum As String) As String Dim Result As Boolean Dim TT As Integer Dim MM As Integer Dim JJ As Integer Dim sPos As Integer Dim Entry As String Result = False ' Ist überhaupt ein Datum eingetragen? If Trim$(Datum) <> ". ." And Datum <> "" Then ' keine Punkte im Datum vorhanden If InStr(Datum, ".") = 0 Then ' Eingabelänge mindestens 4-stellig If Len(Datum) > 3 Then TT = Val(Left$(Datum, 2)) MM = Val(Mid$(Datum, 3, 2)) If Trim$(Mid$(Datum, 5)) = "" Then ' Jahresangabe fehlt -> aktuelles Jahr annehmen JJ = Val(Right$(Date$, 4)) Else JJ = Val(Mid$(Datum, 5)) End If Result = True End If Else ' Eingabe enthält Punktangaben Entry = Datum ' Tag ermitteln sPos = InStr(Entry, ".") TT = Val(Left$(Entry, sPos - 1)) Entry = Mid$(Entry, sPos + 1) ' Monat ermitteln sPos = InStr(Entry, ".") If sPos Then MM = Val(Left$(Entry, sPos - 1)) Entry = Mid$(Entry, sPos + 1) ' keine Jahresangabe -> aktuelles Jahr annehmen If Trim$(Entry) = "" Then Entry = Right$(Date$, 4) End If JJ = Val(Entry) Result = True End If End If If Result Then Result = False ' Tag prüfen (Bereich 1-31) If TT > 0 And TT < 32 Then ' Monat prüfen (Bereich 1-12) If MM > 0 And MM < 13 Then ' wenn Jahresangabe zweistellig If JJ < 100 Then ' wenn kleiner 30 If JJ < 30 Then ' Jahr 2000 annehmen JJ = 2000 + JJ Else ' Jahr 1900 annehmen JJ = 1900 + JJ End If End If ' wenn Tag größer als maximale Anzahl Tage ' im angegeben Monat If TT > Day(DateSerial(JJ, MM + 1, 1) - 1) Then ' Tagesangabe korrigieren TT = Day(DateSerial(JJ, MM + 1, 1) - 1) End If Result = True End If End If If Result Then ' wenn alles OK - Datum formatieren ' tt.mm.jjjj Datum = Format$(DateSerial(JJ, MM, TT), _ "dd.mm.yyyy") End If End If Else Result = True Datum = "" End If If Not Result Then Datum = "" CheckDatum = Datum End Function