Programm ändern Schritt 4

Ein VBA-Programm ändern: Plausibilisierung des Geburtsdatums

Datumseingaben zu plausibilisieren ist sehr komplex und aufwendig. Theoretisch müsste man die Eingabe zunächst in die Werte für Tag, Monat und Jahr aufsplitten und dann sowohl technisch als auch logisch prüfen.

Eine technische Prüfung würde das Eingabeformat plausibilisieren, also:

Stellen 1+2	= numerisch
Stelle  3	= ein Punkt
Stellen 4+5	= numerisch
Stelle  6	= ein Punkt
Stellen 7-10	= numerisch

Diese technische Prüfung würde allerdings auch bei der Eingabe 99.99.9999 keinen Fehler finden, so dass eine fachliche Prüfung stattfinden muss. Diese ist recht komplex, denn hier müssen u.a. die Maximaltage je Monat unter Berücksichtigung von Schaltjahren etc. geprüft werden. Wir beschränken uns auf eine deutlich einfachere Methode der Datumsprüfung.

Für die Prüfung eines gültigen Datumswerts benutzen wir die VBA-Funktion IsDate(). Auszug aus der Online-Hilfe zur Funktion IsDate:

„IsDate gibt den Wert True zurück, wenn der Ausdruck ein Datum ist oder in ein gültiges Datum umgewandelt werden kann. Andernfalls wird False zurückgegeben. In Microsoft Windows liegen gültige Datumswerte im Bereich vom 1. Januar 100 n.Chr bis 31. Dezember 9999 n.Chr. Auf anderen Betriebssystemen können andere Bereiche gelten.“

Diese Prüfung der Datumseingabe setzt jedoch voraus, dass der eingegebene Wert auch exakt 10 Zeichen lang ist (bzw. unserem Eingabeschema entspricht: TT.MM.JJJJ).

Um dies herauszufinden, bedient man sich der VBA-Funktion Len(). Mit dieser Funktion ermittelt man die Länge eines Strings (siehe auch Online-Hilfe dazu).

Nun sind wir in der Lage, mithilfe der VBA-Funktionen Len() und IsDate() die Datumsplausibilisierung durchzuführen. Wenn wir jetzt feststellen, dass die Eingabe nicht korrekt ist, sollten wir den Nutzer auch darauf hinweisen. Dies erfolgt in der Regel durch Hinweise, die in einem separaten Fenster angezeigt werden.

Auch hier hilft uns VBA weiter und stellt uns die Funktion MsgBox zur Verfügung. Auszug aus der Online-Hilfe zur MsgBox Funktion:

Diese Funktion zeigt eine Meldung in einem Dialogfeld an und wartet darauf, daß der Benutzer auf eine Schaltfläche klickt. Es wird dann einen Wert vom Typ Integer zurückgegeben, der anzeigt, auf welche Schaltfläche der Benutzer geklickt hat.

Syntax: MsgBox(prompt[, buttons] [, title] [, helpfile, context])

HinweisHinweis: Wenn bei solchen Hilfe-Seiten Argumente in eckigen Klammern stehen, so handelt es sich um optionale Argumente, d.h. diese müssen nicht zwingend benutzt werden. Im Fall der MsgBox-Funktion ist also lediglich der Hinweistext (prompt) notwendig.

Die Plausibilität der Datumsprüfung entspricht nun folgender Logik:

Entscheidungstabelle

oder als Code:

Beispiel:

' Gültigkeitsüberprüfung des Datums
Private Sub txtGebDatum_AfterUpdate()
 
    Dim sDate   As String
    Dim dtDate  As Date
 
   'Eingabe "trimmen"
    sDate = Trim$(txtGebDatum.Value)
   'Länge 0 prüfen
    If Len(sDate) > 0 Then
       'Länge <> 10 prüfen
        If Len(sDate) <> 10 Then
           'Hinweis anzeigen
            MsgBox "Ungültige Datumseingabe. " & _
              "Bitte das Format TT.MM.JJJJ verwenden!"
           'Eingabefeld leeren
            txtGebDatum.Value = ""
        Else
           'Gültigkeit des Datums überprüfen
            If Not IsDate(sDate) Then
               'Hinweis anzeigen
                MsgBox "Ungültige Datumseingabe. " & _
                  "Bitte das Format TT.MM.JJJJ verwenden!"
               'Eingabefeld leeren
                txtGebDatum.Value = ""
            End If
        End If
    End If
 
End Sub

Wie in diesem Beispiel sollte man grundsätzlich seinen Code gut dokumentieren („grüner“ Beschreibungstext). Diese sog. Kommentarzeilen werden durch ein Hochkomma eingeleitet und haben keinen Einfluss auf den Programmverlauf.

Neu ist hier die Bedingungsprüfung If – Then – Else. Diese WENN – DANN – SONST Konstruktion ist relativ selbsterklärend und für die einfache Nutzung wie in diesem Beispiel ist lediglich darauf zu achten, dass am Ende jeder If-Bedingung ein Then steht und das jeder Bedingungsblock mit einen End If abgeschlossen werden muss.