Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 1/2004.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

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.

Funktion eines
Kalendersteuerelements

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

Aufbau des Formulars

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ählten
Datums

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.

Verwendung von Feiertagen

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).

Abb. 3: Die Tabelle Feiertage

Dabei können Sie auch angeben, für welchen Zeitraum die Anwendung die Feiertagsdaten in die Tabelle schreiben soll. Passen Sie diesen Zeitraum den in der Wertliste des Listenfeldes lstJahre enthaltenen Jahren an.

Formular funktionsfähig
machen

Der letzte Schritt bei der Erstellung des Kalenderformulars besteht im Hinzufügen der Ereignisprozeduren, um die einzelnen Steuerelemente zum Leben zu erwecken.

Die Prozeduren werden nachfolgend in der Reihenfolge beschrieben, in der sie beim Öffnen und Anwenden des Formulars verwendet werden.

Anzeigen des Formulars

Stellen Sie sich das Formular zunächst als eine Blackbox vor, die unter Angabe eines initialen Datums aufgerufen wird und nach der Auswahl das gewünschte Datum in einem Textfeld bereithält. Die folgende Funktion überprüft zunächst, ob das Kalenderformular bereits geöffnet ist, und schließt es gegebenenfalls kurz. Dazu verwendet es die Funktion IstFormularGeoeffnet (siehe Beitrag Überprüfen, ob Formular geöffnet ist im Bereich Formulare unter www.access-im-unternehmen.de).

Anschließend wird das Formular mit dem gewünschten Datum als Öffnungsargument als Dialog aufgerufen. Das bedeutet, dass die aufrufende Funktion angehalten wird, bis das Formular geschlossen oder ausgeblendet wird.

Public Function DatumErmitteln(Datum As Date) As Date

    If istformulargeoeffnet("frmKalender") Then

        DoCmd.Close acForm, "frmKalender"

    End If

    DoCmd.OpenForm "frmKalender", Windowmode:=acDialog, OpenArgs:=Datum

    If istformulargeoeffnet("frmKalender") Then

        DatumErmitteln = Forms!frmKalender!txtDatum

    Else

        DatumErmitteln = Datum

    End If

    DoCmd.Close acForm, "frmKalender"

End Function

Quellcode 1

Nach dem Ausblenden des Formulars wird erneut überprüft, ob das Formular noch geöffnet ist und gegebenenfalls das neue Datum ausgelesen. Ist das Formular nicht mehr geöffnet, wird das Eingangsdatum als Ergebnis zurückgegeben (s. Quellcode 1).

Private Sub Form_Current()

    Dim Datum As Date

    If IsNull(Me.OpenArgs) Then

        AktuellesDatum = Date

    Else

        AktuellesDatum = Me.OpenArgs

    End If

    Me.txtDatum = AktuellesDatum

    Me.lstJahr = Year(AktuellesDatum)

    Me.lstMonat = Month(AktuellesDatum)

    KalenderAufbauen

End Sub

Quellcode 2

Öffnen des Formulars

Beim Öffnen des Formulars wird die Prozedur aus Quellcode 2 aufgerufen. Diese überprüft, ob mit dem Öffnungsargument ein Datum übergeben wurde. Falls ja, wird dieses, anderenfalls das aktuelle Datum weiterverwendet. Das unsichtbare Textfeld wird mit dem Datum gefüllt. In den Listenfeldern zur Auswahl von Monat und Jahr werden die entsprechenden Einträge ausgewählt.

Anschließend wird die Funktion KalenderAufbauen aufgerufen, die für die Anzeige des Kalenderblattes sorgt.

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Verwandte Beiträge:

Flexible Datumstextfelder

© 2003-2015 André Minhorst Alle Rechte vorbehalten.