Feiertage berechnen mit Access

Autor: André Minhorst, Duisburg

“Feiertage berechnen – wozu soll das denn gut sein”, werden Sie sich vielleicht jetzt fragen: “Die stehen doch alle in meinem Kalender!” Das ist durchaus richtig, sofern Sie noch nicht dazu übergegangen sind, Microsoft Outlook anstelle eines Kalenders zu verwenden. Hier ist es nämlich keineswegs selbstverständlich, dass alle vorhandenen Feiertage auch vermerkt sind – Sie müssen der Anwendung erst mitteilen, dass sie auch die Feiertage anzeigen soll. Auch zur Berechnung von Fristen ist die Kenntnis der Feiertage nicht unwichtig – es ist schließlich kein Zufall, dass Sie noch nie an einem Feier- oder Sonntag ein Buch zur Bücherei zurückbringen mussten.

Die im Folgenden vorgestellte Anwendung soll eine Tabelle erstellen, die alle Feiertage in einem bestimmten Bundesland in einem bestimmten Zeitraum enthält. Dabei soll der Anwender das gewünschte Bundesland und den Zeitraum selbst auswählen können.

Zweck der Feiertagstabelle

Mit der Tabelle lassen sich anschließend weitere nützliche Aufgaben durchführen: Zum einen kann sie als Grundlage für die Berechnung von Fristen dienen. Die Berechnung von Fristen wird im Beitrag Fristen berechnen leicht gemacht in der vorliegenden Ausgabe vorgestellt.

Zum anderen erstellen Sie mit Hilfe der Tabelle eine Datei, die Sie als Grundlage für die in Outlook angezeigten Feiertage verwenden können. Dabei erfahren Sie auch noch, wie Sie Outlook dazu bringen, die angegebenen Daten zu übernehmen.

Grundlagen über dieunterschiedlichen Feiertage

Feiertage lassen sich in drei Kategorien einteilen: Erstens gibt es Feiertage, die immer auf das gleiche Datum fallen. Das sind z. B. Silvester, Weihnachten, der Tag der Arbeit (1. Mai) und einige andere. Die zweite Kategorie sind die Feiertage, die meistens auf den gleichen Kalendertag fallen, aber nicht zwangsläufig auf das gleiche Datum.

Dabei handelt es sich beispielsweise um die Osterfeiertage, Christi Himmelfahrt oder Fronleichnam. Zur dritten Kategorie gehören die Adventstage und der Buß- und Bettag. Sie haben einen bestimmten Abstand vom Datum des Heiligabend. Dabei spielt auch der Wochentag des Heiligabend eine Rolle.

Eine weitere Schwierigkeit ist, dass manche Feiertage nicht in allen, sondern nur in bestimmten Bundesländern gefeiert werden.

Die Verwaltung der Feiertagsdaten beschränkt sich nicht nur auf die Feiertagsdaten selbst, sondern auch auf die Bundesländer, in denen bestimmte Feiertage gefeiert werden. Daher benötigen Sie zunächst einmal eine Tabelle mit den Grunddaten, die in den nächsten Abschnitten vorgestellt wird. Außerdem benötigen Sie eine Tabelle, die eine Auflistung der einzelnen Bundesländer enthält sowie eine Tabelle, um die Feiertage den Bundesländern zuzuordnen.

Tabelle der Feiertagsdaten

Wie bereits erwähnt, gibt es drei unterschiedliche Kategorien von Feiertagen. Zur Berechnung der Feiertage sind unterschiedliche Informationen erforderlich, die in einer Tabelle namens tblFeiertageGrunddaten gespeichert werden sollen (siehe Bild 1).

Das erste Feld der Tabelle heißt FeiertagNr und dient als Primärindex. Das Feld Feiertag beinhaltet die Bezeichnung der Feiertage.

Da es einige Feiertage gibt, die an festen Daten stattfinden, enthält die Tabelle weiterhin zwei Felder mit dem Tag und dem Monat des Feiertages.

Das nächste Feld ist das Feld FeiertagArt. Hier trägt man ein, ob der Feiertag an einem bestimmten Datum ist, ob er vom Datum des Osterfeiertags abhängt oder ob er vom Datum des vierten Advent abhängt.

Das Feld ist mit der Tabelle tblFeiertagsarten verknüpft. Sie enthält die Nummer der Feiertagsart und deren Bezeichnung (siehe Bild 2).

Bild 2: Tabelle der unterschiedlichen Feiertagsarten

Feiertage verschiedenerBundesländer

Es gibt bekanntlich vereinzelte Feiertage, die nicht in allen oder sogar nur in wenigen Bundesländern gefeiert werden. Diese Tatsache soll auch bei der Berechnung der Feiertage berücksichtigt werden.

m:n-Beziehung zwischen Feiertagen und Bundesländern herstellen

Um festzulegen, welcher Feiertag in welchem Bundesland gefeiert wird, benötigen Sie eine m:n-Verknüpfung. Die eine Tabelle der Verknüpfung ist die Tabelle tblFeiertageGrunddaten, die andere Tabelle müssen Sie noch erstellen: Sie enthält eine Auflistung aller Bundesländer (siehe Bild 4).

Bild 3: Entwurfsansicht der Tabelle tblFeiertageBundesländer

Die beiden Tabellen werden über eine Verknüpfungstabelle miteinander verbunden. Die Verknüpfungstabelle heißt tblFeiertageBundesländer und enthält nur zwei Felder: das Feld FeiertagNr und das Feld BundeslandNr (siehe Bild 3).

Die beiden Felder sind mit den jeweiligen Primärindexfeldern der beiden Tabellen tblFeiertage und tblBundesländer verknüpft.

Bild 4: Die Tabelle tblBundesländer

Formular zur Verwaltung von Feiertagen und Bundesländern

Die Daten der einzelnen Feiertage und die Bundesländer, in denen sie gefeiert werden, können Sie bequem in einem Formular verwalten.

Das Formular enthält als Datenherkunft die Tabelle tblFeiertageGrunddaten. Die Darstellung der mit den Feiertagen verknüpften Bundesländer ist über zwei Listenfelder realisiert. Das rechte Listenfeld enthält alle Bundesländer, in denen der Feiertag begangen wird, das linke Listenfeld enthält die restlichen Bundesländer (siehe Bild 5).

Sie können einzelne Bundesländer zwischen den beiden Listenfeldern hin- und herbewegen oder alle Einträge entweder in das linke oder rechte Listenfeld schieben.

Hinweis

Weitere Informationen zur Realisierung der Darstellung einer m:n-Beziehung mit zwei Listenfeldern können Sie direkt aus der Beispieldatenbank oder dem Beitrag Fristen berechnen leicht gemacht dieses Heftes entnehmen.

Bild 5: Formular zur Eingabe der Feiertagsdaten

Function VierterAdvent(Jahr As Long) As Date
    VierterAdvent = CDate("24.12." & Jahr)
    Do While Not Weekday(VierterAdvent) = 1
        VierterAdvent = VierterAdvent - 1
    Loop
Function Ostersonntag(Jahr As Long) As Date
    Dim a, b, c, d, e, Tag, Monat
    a = Jahr Mod 19
    b = Jahr Mod 4
    c = Jahr Mod 7
    d = (19 * a + 24) Mod 30
    e = (2 * b + 4 * c + 6 * d + 5) Mod 7
    Tag = 22 + d + e
    Monat = 3
    If Tag > 31 Then
        Tag = d + e - 9
        Monat = 4
    End If
    Ostersonntag = Tag & "." & Monat & "." & Jahr

Einige Daten von Feiertagen müssen nicht berechnet werden, da sie – unabhängig vom Jahr – immer auf das gleiche Datum fallen. Die anderen sind jeweils von einem bestimmten Stichtag abhängig, dessen Datum zunächst berechnet werden muss.

Dabei gibt es zwei Stichtage: den vierten Advent und den Ostersonntag. Natürlich könnten Sie auch einen anderen Advent als den vierten und auch den Ostermontag statt des Ostersonntags berechnen – wichtig ist nur, dass Sie einen festen Tag verwenden, um die davon abhängigen Daten berechnen zu können.

Ermitteln des Datums des vierten Advents

Das Datum des vierten Advents kann jeder Mensch mit einem einfachen Kalender ermitteln. Man schaut einfach, auf welchen Tag der Heiligabend fällt, und wenn es sich bei dem Tag nicht um einen Sonntag handelt, fährt man mit dem Finger auf dem Kalender soweit zurück, bis man auf den vorherigen Sonntag stößt.

Genauso einfach funktioniert die VBA-Funktion aus Quellcode 1. Da Windows einen integrierten Kalender zur Verfügung stellt, müssen Sie der Funktion lediglich das Jahr, für das die Feiertage berechnet werden sollen, als Parameter übergeben.

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