Zum Inhalt springen
Der Guide für ein smartes Leben.
Kalender forever

Teil 5: VBA: Geburts-/Festtagskalender

Autor: Redaktion pcmagazin • 26.9.2008 • ca. 2:30 Min

Sobald der Anwender eines der beiden Dropdown- Listenfelder der Symbolleiste auf einen bestimmten Monat oder ein bestimmtes Jahr einstellt, startet Word das zugehörige KalenderErstellen- Makro. Es ermittelt zunächst die aktuellen Einstellungen der Dropdown-Listenfelder und aktualisiert daraufhin d...

Sobald der Anwender eines der beiden Dropdown- Listenfelder der Symbolleiste auf einen bestimmten Monat oder ein bestimmtes Jahr einstellt, startet Word das zugehörige KalenderErstellen- Makro. Es ermittelt zunächst die aktuellen Einstellungen der Dropdown-Listenfelder und aktualisiert daraufhin die Kalenderüberschrift, die den Monat und das Jahr des gewählten Kalenders anzeigt. Dazu ruft das Makro die Hilfsroutine TextmarkeErsetzen auf. Diese markiert den Inhalt der angegebenen Textmarke (die in diesem Fall MonatJahr heißt), ersetzt ihn durch den neuen Text und hinterlegt diesen dann wieder mit einer gleichnamigen Textmarke.

VBA: Geburts-/Festtagskalender
Schönheitsoperation: Wenn Ihnen die Schriftart des Kalenders nicht gefällt, können Sie sie interaktiv und mit WYSIWYG-Kontrolle ändern.
© Archiv

Anschließend widmet sich das KalenderErstellen- Makro der Generierung des gewünschten Monatskalenders. Zu diesem Zweck berechnet das Makro zunächst den Wochentag, auf den der erste Tag des gewählten Monats fällt. Die Nummer dieses Wochentags bestimmt zugleich die Tabellenspalte, in der das Makro mit der Ausgabe der Tageszahlen dieses Monats beginnt. Danach kalkuliert das Makro, wie viele Tage (intAnzahlTage) der jeweilige Monat hat. Da es dafür keine einschlägige VBA-Funktion gibt, bedient sich das Makro eines Tricks: Die Day-Funktion liefert eine Zahl zwischen 1 und 31, die angibt, auf welchen Tag eines Monats das als Argument übergebene Datum fällt. Der Trick besteht nun darin, die Nummer des "nullten" Tags des Folgemonats (!) berechnen zu lassen. Da es diesen Tag nicht gibt, liefert die Funktion stattdessen die Nummer des letzten Tags (mithin die Anzahl der Tage) im gewünschten Monat zurück.

Mit der Kenntnis der ersten Ausgabespalte und der Anzahl der Tage sind die notwendigen Eckdaten für die Kalendererstellung vorhanden. Das Makro bewegt sich per For-Next-Schleife zur errechneten Ausgabespalte und schreibt dort eine Eins (für den ersten Tag des Monats) in die Zelle. Danach bewegt es sich zur nächsten Zelle und schreibt dort eine Zwei hinein, und so weiter. Das Ganze wiederholt sich bis zur Ausgabe der letzten Tageszahl, die mit der kalkulierten Anzahl der Tage im jeweiligen Monat übereinstimmt.

In jeder Ausgabezelle prüft das Makro, ob der jeweilige Tag ein Feiertag ist. Dazu ruft es die benutzerdefinierte Funktion IstFeiertag auf. Die prüft jeweils, ob das als Argument übergebene Datum auf einen überregionalen Feiertag mit fixem beziehungsweise variablem Datum (siehe "Die Berechnung von Feiertagen") fällt. Trifft das zu, liefert die Funktion den Namen des Feiertags zurück, den das Makro in einer 6 Punkt kleinen Schrift hinter der Tageszahl in die Ausgabezelle einträgt.

Sofern das Kalenderdatum ein Feiertag ist (oder auf einen Sonntag fällt), weist das Makro dem gesamten Zellinhalt die Schriftfarbe Rot zu. Sollte der Feiertagsname allerdings das Kürzel "(z.T.)" enthalten, handelt es sich um einen regionalen Feiertag. In diesem Fall belässt es das Makro bei der voreingestellten Schriftfarbe Schwarz.

Im nächsten Schritt prüft KalenderErstellen, ob der jeweilige Kalendertag ein vom Anwender festgelegter Jahrestag ist. Dazu durchläuft die zuständige Funktion IstJahrestag sämtliche Dokumentvariablen in der Vorlage und prüft jeweils, ob das darin gespeicherte Datum mit dem Kalenderdatum übereinstimmt. Im Erfolgsfall liefert die Funktion eine kommagetrennte Liste mit allen Jahrestagsnamen zurück, die auf das jeweilige Datum fallen. Das Makro schreibt den Inhalt dieser Liste ebenfalls in einer 6 Punkt großen Schrift in die jeweilige Ausgabezelle.

Das Makro SchriftartWählen ist mit der gleichnamigen Schaltfläche in der vorlageneigenen Symbolleiste verknüpft. Die einzige Funktion des Makros besteht darin, das Userform-Dialogfeld frmSchriftwahl aufzurufen. Das Dialogfeld besteht im Wesentlichen aus einem Listenfeld (lstSchriftarten) für die interaktive Auswahl der Schriftart sowie den beiden Standardschaltflächen OK (cmdOK) und Abbrechen (cmdCancel).