Datumsfelder mit Klasse

Datumsangaben können Sie von Hand eingeben, mit einem Steuerelement zur Auswahl des gewünschten Datums – oder Sie statten das Textfeld mit dem Datum mit unserer Klasse clsDatebox aus und stellen das Datum ganz einfach mit den Cursor-Tasten ein. Dazu benötigen Sie nicht mehr als zwei Zeilen Code pro Textfeld, dass Sie mit dieser Funktion ausstatten wollen – und die hier vorgestellte Klasse.

YouTube

Mit dem Laden des Videos akzeptieren Sie die Datenschutzerklärung von YouTube.
Mehr erfahren

Video laden

Schnelle Datumseingabe

Die Datumseingabe lässt sich prima vereinfachen, wenn Sie dazu nur die Cursor-Tasten verwenden. Die hier vorgestellte Lösung macht die möglich: Sie markiert beim Fokuserhalt eines entsprechend präparierten Datumfeldes einen der Datumsbestandteile wie den Tag, den Monat oder das Jahr. Mit den beiden Tasten Nach links und Nach rechts springen Sie zum vorherigen beziehungsweise folgenden Datumsbestandteil, mit den Tasten Nach oben und Nach unten ändern Sie den Wert jeweils um eins nach oben oder untern.

Wer es besonders eilig hat, hält dabei noch die Strg-Taste gedrückt und ändert den aktuellen Wert gleich um zehn nach oben oder unten. Zu beachten ist, dass etwa beim ändern des Tages von 31 auf 01 auch der Monat geändert wird, also etwa von 01 auf 02. Gleiches gilt, wenn Sie den Monat von 12 auf 01 oder von 01 auf 12 ändern – in diesem Fall wird das Jahr um eins erhöhat oder vermindert. Wie dies in einem Formular aussieht, sehen Sie in Bild 1.

pic001.png

Bild 1: Schnelles ändern des Datums per Cursor-Taste

Das Textfeld markiert immer den kompletten Datumsteil, also entweder den Tag, den Monat oder das Jahr. Die manuelle Eingabe des Datums ist nicht möglich, Sie können dies nur mit den Cursortasten erledigen. Dies beugt Fehleingaben vor.

Wenn das Textfeld über die Tabulator- oder die Eingabetaste angesteuert wird, markiert es direkt den kompletten Tag. Wenn der Benutzer mit der Maus hineinklickt, wird der angeklickte Datumsteil markiert.

Technik einsetzen

Das Beste an der nachfolgend vorgestellten Technik ist: Sie statten ein Textfeld blitzschnell mit der dafür nötigen Klasse und ein oder zwei Konfigurationseinstellungen aus. Dazu gehen Sie wie folgt vor:

  • Legen Sie das gebundene oder ungebundene Feld zur Datumseingabe an, zum Beispiel txtDatum.
  • Stellen Sie die Eigenschaft Beim Laden des Formulars mit dem Textfeld auf [Ereignisprozedur] ein und klicken Sie auf die Schaltlfäche mit den drei Punkten, um eine entsprechende Ereignisprozedur zu erstellen.
  • Ergänzen Sie den Code wie folgt. Fertig!
Dim WithEvents objDatebox As clsDatebox
Private Sub Form_Load()
    Set objDatebox = New clsDatebox
    Set objDatebox.Datebox = Me!txtDatum
End Sub

Damit erstellen Sie ein neues Objekt auf Basis der Klasse clsDatebox und stellen seine Eigenschaft Datebox auf das betroffene Textfeld ein. Nach dem Öffnen des Formulars steht die Funktion bereits zur Verfügung!

Das ist allerdings noch nicht alles, was Sie zur Inbetriebnahme wissen müssen. Eine Information betrifft den Standardwert für das Datumsfeld.

Wenn Sie selbst keinen Standardwert vergeben, wird das Feld beim Anzeigen mit dem aktuellen Datum vorbelegt.

Sollten Sie einen Standardwert in der Tabellendefinition hinterlegt haben oder die Eigenschaft Standardwert des Textfelds im Formular eingestellt haben, wird dieser verwendet. Sie können allerdings eine zweite Eigenschaft der Klasse verwenden, um den Standardwert per Code vorzugeben:

Private Sub Form_Load()
    Set objDatebox = New clsDatebox
    objDatebox.DefaultDate = "23.1.1971"
    Set objDatebox.Datebox = Me!txtDatum
End Sub

Die Zeile mit der Zuweisung des Datums an die Eigenschaft DefaultDate muss jedoch vor der Zuweisung des zu verwendenden Steuerelements erfolgen.

Mehrere Datumsfelder

Wenn Sie mehrere Datumsfelder in einem Formular mit der Datebox ausstatten möchten (s. Bild 2), deklarieren Sie zunächst entsprechende Objektvariablen für die Objekte:

pic002.png

Bild 2: Entwurf eines Formulars mit Von-Bis-Textfeldern

Dim WithEvents objDateboxVon As clsDatebox
Dim WithEvents objDateboxBis As clsDatebox

Dann füllen Sie diese Objektvariablen mit neuen Instanzen der Klasse und weisen die Standardwerte und die Textfelder zu:

Private Sub Form_Load()
    Set objDateboxVon = New clsDatebox
    objDateboxVon.DefaultDate = Date
    Set objDateboxVon.Datebox = Me!txtVon
    Set objDateboxBis = New clsDatebox
    objDateboxBis.DefaultDate = Date
    Set objDateboxBis.Datebox = Me!txtBis
End Sub

Fertig! Und nun kommen wir zu einem weiteren interessanten Feature: Das ändern des Datums löst nämlich ein Ereignis aus – deshalb werden die Objektvariablen auch mit dem Schlüsselwort WithEvents deklariert.

Dadurch können Sie die soeben deklarierten Objekte objDateboxVon und objDateboxBis im linken Kombinationsfeld des VBA-Fensters des Formularmoduls auswählen, was automatisch die einzige Ereignisprozedur dieser beiden Objekte anlegt (s. Bild 3).

pic003.png

Bild 3: Anlegen der Ereignisprozedur für das clsDatebox-Objekt

Wozu benötigen Sie diese Prozedur Nun, zum Beispiel können Sie so direkt beim Einstellen des Datums prüfen, ob das Startdatum größer als das Enddatum ist, was in den meisten Fällen unerwünscht ist.

Dann füllen Sie die Ereignisprozedur DateChange der beiden Objekte objDateboxVon und objDateboxBis wie folgt:

Private Sub objDateboxVon_DateChange()
    If Me!txtVon.Value > Me!txtBis.Value Then
        Me!txtBis.Value = Me!txtVon.Value
    End If
End Sub
Private Sub objDateboxBis_DateChange()
    If Me!txtBis.Value < Me!txtVon.Value Then
        Me!txtVon.Value = Me!txtBis.Value
    End If
End Sub

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar