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 4/2007.

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

Zusammenfassung

Verwenden Sie ein Standardformular zur Eingabe von Zeiträumen.

Techniken

Formulare, VBA, Callback-Funktionen

Voraussetzungen

Access 2000 und höher

Beispieldateien

Zeitraumauswahl.mdb, Zeitraumauswahl.accdb

Shortlink

478

Zeiträume komfortabel auswählen

André Minhorst, Duisburg

Sehr viele in Datenbanken gespeicherte Daten hängen in irgendeiner Weise mit Datumsangaben zusammen. Und egal, ob es sich um Rechnungen, Bestellungen, Projekte, Erscheinungsdaten, Buchungsdaten oder Termine handelt, eines haben fast alle gemeinsam: Die Daten sollen früher oder später nach dem Datum sortiert, gruppiert oder gefiltert werden. Letzteres erfordert die Angabe eines passenden Zeitraums, den Sie mit dem hier vorgestellten Formular ganz einfach auswählen.

Die Auswahl von Zeiträumen erfolgt üblicherweise durch das Eingeben zweier Datumsangaben in entsprechende Textfelder. Gegebenenfalls unterstützt die Anwendung den Benutzer noch durch das Bereitstellen einer Schaltfläche zum Öffnen eines Kalenders, aus dem sich die gewünschten Daten einfach auswählen lassen. Das reicht für viele Fälle aus, zum Beispiel bei denen, die nach individuellen Zeiträumen ohne Regelmäßigkeiten verlangen.

Die im Beitrag Kassenbuch (s. Shortlink 486) vorgestellte Lösung dient der Verwaltung von Buchungsvorgängen, die beispielsweise als Grundlage für die Erstellung verschiedener Steuererklärungen wie etwa der Umsatzsteuervoranmeldung oder auch als Übersicht über die angefallenen Ein- und Ausgänge dienen.

Bei der Auswertung geht es dort meist um fest definierte Zeiträume: Umsatzsteuervoranmeldungen reicht man vierteljährlich oder monatlich ein, eine Einnahme-Überschuss-Rechnung erstreckt sich über ein Kalenderjahr und auch für individuelle Übersichten kommen wohl feste Intervalle wie Wochen, Monate, Quartale oder Jahre zum Tragen.

Das Formular aus Abb. 1 berücksichtigt dies: Damit kann der Benutzer zunächst die Art des Intervalls festlegen (Woche, Monat, Quartal oder Jahr), dann das Intervall selbst auswählen und schließlich den ausgewählten Zeitraum in den beiden unteren Textfeldern des Formulars manuell anpassen.

abb001.tif

Abb. 1: Das Formular zur
komfortablen Auswahl von Zeiträumen

Die Anzahl der in den Kombinationsfeldern vorgegebenen Intervalle, das jeweilige Standardintervall sowie das angezeigte Start- und Enddatum können Sie beim Öffnen des Formulars festlegen - dazu später mehr.

Um Fehleingaben zu verhindern, validiert das Formular den Inhalt der beiden Textfelder und gibt Meldungen aus, wenn eines der beiden Textfelder kein Datum enthält oder das Datum im ersten Textfeld hinter dem des zweiten Textfeldes liegt.

Zeitraumformular im Einsatz

Das Formular können Sie ganz gewöhnlich über einen Doppelklick auf den Eintrag im Datenbankfenster oder in der Navigationsleiste (Access 2007) öffnen. Nach der Auswahl des gewünschten Zeitraums schaltet das Betätigen der OK-Schaltfläche das Formular unsichtbar. Die aufrufende Routine kann nun noch den Inhalt der beiden Textfelder mit dem ersten und dem letzten Tag auslesen und sollte das Formular dann schließen.

Das Formular enthält aber zusätzlich einige öffentliche Eigenschaften, mit denen Sie dieses beim Öffnen konfigurieren können. Das zieht allerdings nach sich, dass Sie es nicht wie üblich mit DoCmd.OpenForm öffnen, sondern es wie eine Klasse instanzieren.

Betrachten Sie zunächst, was passiert, wenn Sie das Formular ganz einfach mit der folgenden Anweisung öffnen:

DoCmd.OpenForm "frmZeitraumAuswaehlen"

Diese Anweisung benötigt den Parameter WindowMode:=acDialog nicht, denn seine Eigenschaften Popup und Modal sind bereits auf Ja eingestellt, was den gleichen Effekt hat: Das Formular gibt den Fokus erst beim Schließen oder Einstellen der Sichtbar-Eigenschaft auf Nein wieder an andere Access-Elemente ab.

Der Aufruf des Formulars löst zunächst das Ereignis Beim Öffnen und damit die Prozedur aus Listing 1 aus. Diese Routine stellt eine ganze Reihe von Eigenschaften ein und speichert diese in passenden Variablen, die später ausgelesen werden. Bei diesen Eigenschaften handelt es sich beispielsweise um die beim Start anzuzeigenden Intervalle für die vier verfügbaren Zeitraum-Varianten Woche, Monat, Quartal und Jahr.

Private Sub Form_Open(Cancel As Integer)

    mZeitraum = eWoche

    mWoche = Kalenderwoche(Date)

    mMonat = Month(Date)

    mQuartal = Format(Date, "q")

    mJahr = Year(Date)

    mWochenVergangenheit = 52

    mWochenZukunft = 52

    mMonateVergangenheit = 12

    mMonateZukunft = 12

    mQuartaleVergangenheit = 12

    mQuartaleZukunft = 12

    mJahreVergangenheit = 20

    mJahreZukunft = 20

    mStartdatum = Date

    mEnddatum = Date

    mReferenzdatum = Date

    Me!cboWoche.RowSourceType = "Wochen"

    Me!cboWoche.Requery

    Me!cboMonat.RowSourceType = "Monate"

    Me!cboMonat.Requery

    Me!cboQuartal.RowSourceType = "Quartale"

    Me!cboQuartal.Requery

    Me!cboJahr.RowSourceType = "Jahre"

    Me!cboJahr.Requery

    ZeitraumAktualisieren

End Sub

Diese hängen entsprechend Listing 1 vom aktuellen Datum ab: Die im Kombinationsfeld cboWoche angezeigte Kalenderwoche soll zum Beispiel die Woche sein, in der sich das mit Date ermittelte aktuelle Datum befindet. Neben diesen "Standardwerten" soll auch die Anzahl der verfügbaren Werte je Kombinationsfeld einstellbar sein. So enthalten beispielsweise die beiden Variablen mWochenVergangenheit und WochenZukunft die Anzahl der Einträge im Kombinationsfeld cboWochen, die das Kombinationsfeld zusätzlich zur in mWoche gespeicherten Kalenderwoche auflisten soll.

Schließlich weist die Form_Open-Routine den vier Kombinationsfeldern noch die Werte für die Eigenschaft Herkunftstyp (RowSourceType) zu und sorgt mit der Requery-Methode dafür, dass die Kombinationsfelder bei nächster Gelegenheit aktualisiert werden. Die Werte der RowSourceType-Eigenschaft der vier Kombinationsfelder entsprechen vier passenden VBA-Funktionen, die die Kombinationsfelder bei Bedarf füllen. Wie diese so genannten Callback-Funktionen genau funktionieren und welche Alternativen es gibt, lesen Sie im Beitrag Kombinationsfelder dynamisch füllen (Shortlink 476).

Die letzte Anweisung der Form_Open-Prozedur ruft die Routine ZeitraumAktualisieren auf (s. Listing 2). Diese wird nicht nur hier, sondern auch später nach jeder Aktualisierung der Optionsgruppe zum Auswählen des Intervalltyps und des Intervalls ausgeführt. Die erste Aktion dieser Routine ist die Prüfung der aktuell ausgewählten Option und die daraus folgende Aktivierung beziehungsweise Deaktivierung der Kombinationsfelder - wobei das zur aktuell ausgewählten Option gehörende Kombinationsfeld natürlich aktiviert und die anderen deaktiviert werden.

Listing 2: Diese Routine sorgt für die Auswertung der Optionen und Kombinationsfeldinhalte zum Füllen der Textfelder zur Angabe des Start- und Enddatums des festgelegten Intervalls.

Private Sub ZeitraumAktualisieren()

    Dim byteWoche As Byte

    Dim byteMonat As Byte

    Dim intJahr As Integer

    With Me!ogrZeitraum

         Me!cboWoche.Enabled = .value = 1

         Me!cboMonat.Enabled = .value = 2

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:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.