Flexible Datumstextfelder

Bis Access 2003 wiesen Textfelder, die an Datumsfelder gebunden waren, überhaupt keine besonderen Eigenschaften auf. Mit Access 2007 änderte sich dies: Immerhin erscheint hier ein Kalender-Symbol neben dem Textfeld, wenn dieses den Fokus hat, und bietet eine Hilfe für die schnelle Datumsauswahl an. Mit der Lösung aus diesem Beitrag statten Sie Datumstextfelder aller Access-Versionen seit 2000 mit weiteren nützlichen Features aus.

Beispieldatenbank

Die Beispieltabelle zu diesem Beitrag tblDatum enthält schlicht zwei Felder: DatumID dient als Primärschlüssel und Beispieldatum enthält das Feld, an das wir gleich das Datumstextfeld des Beispielformulars binden. Dieses Formular heißt frmDatum und ist über die Eigenschaft Datenherkunft an die Tabelle tblDatum gebunden. Im Detailbereich zeigt es die beiden einzigen Felder dieser Tabelle an (siehe Bild 1).

pic001.png

Bild 1: Entwurfsansicht des Beispielformulars zur Eingabe von Datumsangaben

Vereinfachungen für die Datumseingabe

Wir schauen uns im Rahmen dieses Beitrags drei kleine Hilfen für die einfache Datumseingabe an:

  • Eingabe des aktuellen Datums per Leertaste
  • ändern eines Datumselements mit der Nach oben-Taste
  • ändern eines Datumselements mit der Nach unten-Taste

Die Funktion, die wir mit der Leertaste abbilden möchten, ist eigentlich bereits in Access eingebaut: Sie brauchen einfach nur die Tastenkombination Strg + Umschalt + Komma (,) zu betätigen, schon fügt Access das Datum in das aktuelle Steuerelement ein. Für die Uhrzeit erreichen Sie dies übrigens mit Strg + Umschalt + Punkt (.). Beide Tastenkombinationen sind, das erkennt auch der Laie schnell, nur schwer zu merken, wenn man nicht täglich damit arbeitet.

Aktuelles Datum per Leerzeile

Also verwenden wir einfach die Leertaste als Tastenkombination für die Eingabe des aktuellen Datums. Dies können wir uns erlauben, denn in einer Datumsangabe hat ein Leerzeichen natürlich nichts zu suchen.

Tasteneingaben fangen wir generell mit den KeyDown– und KeyUp-Methoden von Formularen und Steuerelementen ab. Wann welches dieser Ereignisse ausgelöst wird, finden Sie am einfachsten heraus, indem Sie die folgenden beiden Ereignisprozeduren für die entsprechenden Ereigniseigenschaften des Textfelds Beispieldatum hinterlegen:

Private Sub Beispieldatum_KeyDown(KeyCode _
    As Integer, Shift As Integer)
    Debug.Print "KeyDown", KeyCode, Shift
    End Sub
Private Sub Beispieldatum_KeyUp(KeyCode _
    As Integer, Shift As Integer)
    Debug.Print "KeyUp", KeyCode, Shift
    End Sub

Nun platzieren Sie das Access-Fenster so über (oder auch neben) das VBA-Fenster, dass der Direktbereich des VBA-Fensters sichtbar ist. Wenn Sie den Fokus auf das Textfeld Beispieldatum legen und Zeichen mit der Tastatur eingeben, sehen Sie nicht nur, wann welches Ereignis ausgelöst wird, sondern auch, welche Werte die Parameter Keycode und Shift dieser Prozeduren liefern – die Leertaste entspricht beispielsweise dem KeyCode 32. Auf diese Weise erkennen wir außerdem, zu welchem Zeitpunkt ein Zeichen im Textfeld erscheint, nämlich nach dem Herunterdrücken der betroffenen Taste.

Dies nutzen wir aus, um bei Betätigung der Leertaste das aktuelle Datum einzufügen, und zwar durch folgende änderung der Ereignisprozedur Beispieldatum_KeyDown:

Private Sub Beispieldatum_KeyDown(KeyCode _
    As Integer, Shift As Integer)
    Select Case KeyCode
    Case 32
    Me!Beispieldatum = Date
    KeyCode = 0
    Case Else
    Debug.Print KeyCode, Shift
    End Select
    End Sub

Dadurch füllt die Prozedur das Textfeld mit dem aktuellen Datum und setzt den Parameter KeyCode auf den Wert 0. Indem Sie diesen Parameter innerhalb der Ereignisprozedur ändern, können Sie in die Nachrichtenkette eingreifen: Statt des ursprünglichen Werts, beispielsweise 32 für ein Leerzeichen, wird dann der Wert 0 als betätigte Taste weitergeleitet – was bedeutet, dass keine Taste gedrückt wurde.

Dies ist unbedingt nötig, weil Access sonst zuerst, wie gewünscht, das Datum in das Textfeld einträgt, dann aber das ursprüngliche Zeichen, also das Leerzeichen, an das Textfeld schickt. Dies kann je nach Einstellung dazu führen, dass das Leerzeichen das gerade eingegebene Datum überschreibt.

Vor und zurück

Nun fügen wir eine weitere Vereinfachung hinzu: Der Benutzer soll durch Betätigen der Nach oben– und Nach unten-Tasten das Datum einstellen können. Dabei soll das Element, auf dem sich die Einfügemarke aktuell befindet, jeweils um eins erhöht oder vermindert werden.

Wenn sich der Cursor also auf dem Monat befindet und der Benutzer auf Nach oben drückt, soll der Monat um eins erhöht werden.

Mit der Ausgabe der obigen Prozedur im Direktfenster ermitteln wir, welche Werte für den Parameter KeyCode der Nach oben– und Nach unten-Taste entsprechen. Dann erweitern wir die Select Case-Anweisung wie in Listing 1.

Listing 1: Einstellen des Datums in einem Textfeld per Nach oben- und Nach unten-Taste

Private Sub Beispieldatum_KeyDown(KeyCode As Integer, Shift As Integer)
    Dim intSelStart As Integer
    Dim intPosDate As Integer
    Dim intFaktor As Integer
    Dim strIntervall As String
    Select Case KeyCode
    Case 32
    Me!Beispieldatum = Date
    KeyCode = 0
    Case 38, 40
    Select Case KeyCode
    Case 38 ''Nach oben
    intFaktor = 1
    Case 40 ''Nach unten
    intFaktor = -1
    End Select
    intSelStart = Me!Beispieldatum.SelStart
    intPosDate = Len(Left(Me!Beispieldatum, intSelStart)) _
    - Len(Replace(Left(Me!Beispieldatum, intSelStart), ".", ""))
    Select Case intPosDate
    Case 0
    strIntervall = "d"
    Case 1
    strIntervall = "m"
    Case 2
    strIntervall = "yyyy"
    End Select
    Me!Beispieldatum = DateAdd(strIntervall, intFaktor, Me!Beispieldatum)
    KeyCode = 0
    Me.Beispieldatum.SelStart = intSelStart
    Case Else
    Debug.Print "KeyDown", KeyCode, Shift
    End Select
    Debug.Print Beispieldatum.Format
    End Sub

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

TestzugangOder bist Du bereits Abonnent? Dann logge Dich gleich hier ein. Die Zugangsdaten findest Du entweder in der aktuellen Print-Ausgabe auf Seite U2 oder beim Online-Abo in der E-Mail, die Du als Abonnent regelmäßig erhältst:

Schreibe einen Kommentar