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/2011.

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

Lernen Sie Funktionen kennen, mit denen Sie die Daten der Feiertage eines Jahres ermitteln und diese per Array oder Collection zurückliefern.

Techniken

VBA

Voraussetzungen

Access 2000 und höher

Beispieldateien

Feiertage.mdb

Shortlink

www.access-im-unternehmen.de/787

Feiertage dynamisch ermitteln

André Minhorst, Duisburg

Wenn Sie mit Access Termine verwalten, werden Sie auch Feiertage berücksichtigen wollen. Die entsprechenden Datumsangaben liefert Access leider nicht frei Haus - Sie müssen selbst eine entsprechende Funktion bereitstellen. Der vorliegende Beitrag zeigt, wie Sie die Feiertage ermitteln und wie Sie schnell prüfen, ob ein Feiertag auf ein bestimmtes Datum fällt.

Es gibt verschiedene Gruppen von Feiertagen: Solche, die jedes Jahr auf den gleichen Termin fallen (wie Neujahr, Weihnachten oder der Tag der deutschen Einheit), Tage, die vom Datum des Ostersonntags abhängen, das auf komplizierte Art berechnet wird, und Tage, die vom Datum des vierten Advents abhängen. Außerdem müssen Sie bei der Ermittlung von Feiertagen berücksichtigen, dass es einige Feiertage nur in bestimmten Bundesländern gibt. So ist Heilige Dreikönige am 6. Januar nur in drei Bundesländern ein Feiertag, in den übrigen Bundesländern wird gearbeitet.

Tabellen oder reiner Code?

Vor dem Zusammenstellen der Lösung zu diesem Beitrag stand die Frage im Raum, ob man die Basisdaten zu den Feiertagen in Tabellen speichert oder ob man diese komplett per VBA-Code ermittelt. In Anbetracht dessen, dass die Feiertage nur alle Jubeljahre geändert werden, haben wir uns für die reine VBA-Variante entschieden - auch vor dem Hintergrund, dass Sie so nur ein einziges Standardmodul in Ihre Anwendung kopieren müssen, wenn Sie die dynamische Ermittlung der Feiertage verwenden möchten. Der Einsatz einer reinen VBA-Lösung bedeutet zunächst, dass einige grundlegende Informationen in Enumerationen gespeichert werden.

Die erste Enumeration heißt eBundesland und nimmt alle Bundesländer in Form entsprechender Konstanten und Zahlenwerte auf. Sie sieht so aus:

Public Enum eBundesland

eBadenWuerttemberg = 1

eBayern = 2

eBerlin = 4

eBrandenburg = 8

eBremen = 16

eHamburg = 32

eHessen = 64

eMecklenburgVorpommern = 128

eNiedersachsen = 256

eNordrheinWestfalen = 512

eRheinlandPfalz = 1024

eSaarland = 2048

eSachsen = 4096

eSachsenAnhalt = 8192

eSchleswigHolstein = 16384

eThueringen = 32768

End Enum

Warum nun erhalten die Konstanten für die Bundesländer ausschließlich Zweierpotenzen als Zahlenwerte? Nun: So können wir einfach festlegen und ermitteln, welcher Feiertag in welchem Bundesland gefeiert wird.

Dazu nutzen wir eine zweite Enumeration, welche die Feiertage auflistet und deren Zahlenwert Informationen darüber liefert, welche Bundesländer den jeweiligen Feiertag begehen. Diese Enumeration können Sie in Kurz- oder Langform verwenden. Hier ist eine abgekürzte Version der Langform:

Public Enum eFeiertageBundeslaender

eNeujahr = eBadenWuerttemberg + eBayern +

eBerlin + eBrandenburg + eBremen +

eHamburg + eHessen +

eMecklenburgVorpommern + eNiedersachsen +

eNordrheinWestfalen + eRheinlandPfalz +

eSaarland + eSachsen + eSachsenAnhalt +

eSchleswigHolstein + eThueringen

eHeiligeDreiKoenige = eBadenWuerttemberg +

eBayern + eSachsenAnhalt

...

eFronleichnam = eBadenWuerttemberg +

eBayern + eHessen + eNordrheinWestfalen +

eRheinlandPfalz + eSaarland +

eSachsen + eThueringen

eMariaHimmelfahrt = eBayern + eSaarland

...

End Enum

Wie gut zu erkennen ist, werden zu jedem Feiertag die Konstanten aller Bundesländer summiert, in denen der jeweilige Feiertag stattfindet. Da wir den Konstanten der Bundesländer Zweierpotenzen zugewiesen haben, können wir theoretisch statt der etwas längeren Ausdrücke auch einen Zahlenwert angeben. Für Feiertage, die in allen Bundesländern stattfinden, wäre dies etwa 32.768 + 16.384 + 8.192 + 4.096 + 2.048 + 1.024 + 512 + 256 + 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1, also 65.535. Allerdings lassen sich die Informationen doch besser prüfen, wenn sie mit den Konstanten angegeben werden.

Ermittlung des Datums des vierten Advents

Der vierte Advent ist der letzte Sonntag vor dem ersten Weihnachtstag und kann somit auch auf Heiligabend fallen. Der erste bis vierte Advent sind in allen Bundesländern Feiertage. Der erste, zweite und dritte Advent wird jeweils an den Sonntagen vor dem vierten Advent gefeiert, somit sind diese Feiertage vom Datum des vierten Advents abhängig. Auch der Buß- und Bettag, der allerdings nur in Sachsen Feiertag ist, hängt vom Datum des vierten Advents ab. Das Datum des vierten Advents wird mit der folgenden Funktion ermittelt:

Function VierterAdvent(intJahr As Integer)

As Date

    Dim dat As Date

    dat = CDate("24.12." & intJahr)

    Do While Not Weekday(dat, vbMonday) =

        vbSunday

        dat = dat - 1

    Loop

    VierterAdvent = dat

End Function

Diese Funktion stellt den Wert der Variablen dat einfach auf den 24. Dezember des Jahres ein, für welches das Datum des vierten Advents ermittelt werden soll, und wird in einer Do While-Schleife so lange um jeweils einen Tag in Richtung Jahresbeginn verschoben, bis es auf einen Sonntag fällt. Dies kann auch gleich beim ersten Durchlauf der Fall sein - dann fällt Heiligabend genau auf den vierten Advent. Die vom vierten Advent abhängigen Feiertage werden dann durch Subtraktion der entsprechenden Anzahl Tage ermittelt.

Ermittlung des Datums des Ostersonntags

Die Ermittlung des Ostersonntags erfolgt durch eine recht komplizierte Berechnung, die durch die folgende Funktion abgebildet wird:

Function Ostersonntag(intJahr As Integer) As Date

    Dim a As Integer

    Dim b As Integer

    Dim c As Integer

    Dim d As Integer

    Dim e As Integer

    Dim intTag As Integer

    Dim intMonat As Integer

    a = intJahr Mod 19

    b = intJahr Mod 4

    c = intJahr Mod 7

    d = (19 * a + 24) Mod 30

    e = (2 * b + 4 * c + 6 * d + 5) Mod 7

    intTag = 22 + d + e

    intMonat = 3

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.