Kalendersteuerelement im Eigenbau

André Minhorst, Duisburg

Microsoft bietet ein eigenes Kalendersteuerelement an, das in beliebige Formulare eingebaut werden kann. Das ist an sich sehr praktisch und auch zügig erledigt, kann aber schnell zum Selbsttor werden: Wenn Sie eine Anwendung mit integriertem Kalendersteuerelement weitergeben, kann es schnell passieren, dass die Anwendung unbedienbar wird, weil das entsprechende OCX-Steuerelement fehlt. Das Steuerelement wird nämlich keinesfalls einfügt, sondern nur verknüpft. Es muss auf jedem Rechner vorhanden sein, auf dem die Anwendung laufen soll. Damit Sie keine Probleme damit haben, programmieren Sie einfach ein eigenes Kalendersteuerelement, das außerdem noch zusätzliche Funktionen aufweist.

Das Kalendersteuerelement dient der Anzeige und Auswählen von Datumsangaben. Das Hauptaugenmerk liegt dabei auf der vereinfachten Eingabe.

Wenn Sie dem Benutzer eine Eingabemaske zur Auswahl des gewünschten Datums zur Verfügung stellen, haben Sie die volle Kontrolle darüber, dass dieses auch im richtigen Format eingegeben wird.

Abb. 1: Das Kalendersteuerelement von Microsoft

Microsoft stellt ein Kalendersteuerelement zur Verfügung, das zur Eingabe des Datums zwei Kombinationsfelder zur Auswahl von Monat und Jahr sowie den ausgewählten Daten angepasstes Kalenderblatt zur Auswahl des Tages bereitstellt (s. Abb. 1).

Leider ergeben sich immer wieder Schwierigkeiten beim Einsatz dieses Steuerelements. Die meisten davon treten auf, wenn eine Datenbankanwendung, die auf dieses Steuerelement zugreift, auf andere Rechner übertragen werden soll. Es kann dann vorkommen, dass das Kalendersteuerelement nicht in der richtigen Version oder gar nicht vorhanden ist.

Wer Datenbanken für andere entwickelt, kennt die daraus resultierenden Probleme. Diese können natürlich auch mit dem Kalendersteuerelement von Microsoft gelöst werden, aber auf Nummer Sicher gehen Sie mit einer Lösung, die komplett auf externe Komponenten verzichtet. Daher lernen Sie im vorliegenden Beitrag, wie Sie ein Kalenderformular zur Auswahl und Anzeige von Datumsangaben erstellen und dieses in Ihre eigenen Anwendungen integrieren können.

Das Kalenderformular soll wie in Abb. 2 aufgebaut sein. Der Aufbau behebt einige ergonomische Schwächen des Kalendersteuerelements. So können die Monate und Jahre über ein Listenfeld ausgewählt werden, was bei den Monaten immer und bei den Jahren in den meisten Fällen zumindest den Klick zum öffnen des Kombinationsfeldes spart.

Außerdem ist die Anordnung der Steuerelemente so gestaltet, dass Tag, Monat und Jahr in der in Deutschland üblichen Reihenfolge ausgewählt werden können.

Daneben wird bei dem OCX nach der Auswahl eines anderen Monats oder Jahres der ausgewählte Tag wieder aufgehoben, was sehr nervend sein kann, wenn man nicht weiß, dass zuerst Monat und Jahr und dann erst der Tag ausgewählt werden soll. Die selbst gebaute Lösung soll auch dieses Manko beheben.

Abb. 2: Das selbst gebaute Kalendersteuerelement

Das Formular besteht aus den beiden Listenfeldern für die Auswahl von Monat und Jahr, einer Schaltfläche zum Bestätigen der Auswahl sowie aus 42 Bezeichnungsfeldern für die Auswahl des Tages.

Warum nun 42 Bezeichnungsfelder für nur maximal 31 Tage Eine Woche wird in einer Zeile angezeigt und eventuell passt gerade ein Tag in die erste Zeile. Wenn nicht gerade Februar ist, werden in dem Fall vier volle und zwei angefangene Zeilen benötigt – und sechs Zeilen mit je sieben Feldern ergeben 42 Felder.

Auswahl der Monate

Das Listenfeld namens lstMonate zur Auswahl der Monate ist nicht gebunden und hat eine Wertliste als Datenherkunft. Die Wertliste hat folgenden Inhalt:

1;"Januar";2;"Februar";3;"März";4;"April";5;"Mai";6;"Juni";7;"Juli";8;"August";9;"September";10;"Oktober";11;"November";12;"Dezember"

Damit nicht die Monatszahlen, sondern nur Monatsnamen im Listenfeld angezeigt werden, stellen Sie die Eigenschaften Spaltenanzahl und Spaltenbreiten auf die Werte 2 und 0 ein.

Richten Sie die Höhe des Listenfeldes so ein, dass alle zwölf Monate gleichzeitig zu sehen sind.

Auswahl der Jahre

Das Listenfeld zur Auswahl der Jahre heißt lstJahre und hat ebenfalls eine Wertliste als Datensatzherkunft.

Den Inhalt der Wertliste können Sie in Abhängigkeit von der Verwendung beliebig festlegen. Die Wertliste der Beispieldatenbank enthält beispielsweise alle Jahre von 1900 bis 2050. Das sollte für die Lebensdauer dieses Formulars und alle Anwendungen ausreichend sein.

Falls Sie keine Lust haben, eine solch umfangreiche Wertliste manuell zu erstellen, legen Sie sich einfach eine kleine Funktion in einem Modul Ihrer Wahl an und lassen Sie das Ergebnis im Testfenster ausgeben:

Public Function Jahre()
    Dim str As String
    For i = 1900 To 2050
        str = str & i & ";"
    Next i
    Jahre = str
End Function

Anschließend kopieren Sie die Zeichenfolge in die entsprechende Eigenschaft.

Auswahl der Tage

Die Auswahl der Tage könnte zwar auch mit einem Listen- oder Kombinationsfeld erledigt werden, aber auf Grund der vielen Informationen, die dort schwer unterzubringen sind, ist die hier gewählte Variante wesentlich ergonomischer und übersichtlicher.

Legen Sie zunächst sieben Bezeichnungsfelder für die Bezeichnungen der einzelnen Wochentage an. Diese können Sie dann sechs Mal in die jeweils darunter liegende Zeile kopieren.

Vergeben Sie entsprechend der Zeile und der Spalte die Namen für die Bezeichnungsfelder in der Form date<Zeile><Spalte>. Das linke obere Bezeichnungsfeld heißt also beispielsweise date11, das rechte obere date16 und so weiter.

Stellen Sie den Wert der Eigenschaft Hintergrund auf Normal ein, damit später änderungen der Hintergrundfarbe auch sichtbar werden – bei Verwendung eines transparenten Hintergrunds können Sie die Farbe nämlich ändern, ohne dass sich etwas tut.

Um die Beschriftung müssen Sie sich noch keine Gedanken machen, da diese ohnehin von der Kombination aus Monat und Jahr abhängt.

Speichern des ausgewähltenDatums

Das ausgewählte Datum wird zu jedem Zeitpunkt in einem Textfeld namens txtDatum gespeichert. Dieses Textfeld soll unsichtbar sein; stellen Sie daher den Wert der Eigenschaft Sichtbar auf Nein ein.

Damit das Kalenderformular auch Feiertage anzeigen kann, müssen die entsprechenden Daten zur Verfügung stehen. Im Beitrag Feiertage berechnen mit Access in Ausgabe 6/2001 von Access im Unternehmen erfahren Sie, wie Sie eine Tabelle namens Feiertage erstellen und bundeslandabhängig mit Feiertagsbezeichnungen und deren Daten füllen (s. Abb. 3).

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

Workplace

Jahresabonnement TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar