Wie erstelle ich in Excel (VBA) einen Kalender unabhängig vom PC Datum?

2 Antworten

Erstmal unterstütze ich das, was PWolff geschrieben hat.

Du hast aber zusätzlich zu den üblichen Tageszuordnungen noch variable Feiertage und Schaltjahre. Schaltjahr ist seit 2001 und bis 2099 einfach:

=wenn(Rest(Jahr;4)=0, dann Feb 29 Tage. Liefert xl gratis, aber:

Viele Feiertage richten sich nach Ostern. Ich hab mir deshalb eine Tabelle gemacht, die alle beweglichen Feiertage als Differenz zu Ostern und ausserdem die fixen Feiertage umfasst (zwecks automatischer Formatierung), also zB:

Schmotziger Donnerstag, Rosenmontag, Faschingsdienstag(bei diesen spielt das Schaltjahr meist eine Rolle), Karfreitag, Ostern selbst, Christi Himmelfahrt, Pfingsten, Fronleichnam. Ausserdem Spezialformeln für Buß-und Bettag (3.Mi im Nov, s.u.), 1.,2.,3.,4. Advent.

In diese Liste kann man auch Geburts- oder Gedenktage mit bedingt anderer Formatierung einfügen.

Übrigens: Du solltest dich absprechen, ob Der Kunde eine senkrechte Liste der Tage akzeptiert, die ist übersichtlicher, Mein Chef wollte sowas nur als waagrechte Liste haben (da kann man die Zeilenzahl nicht ausnützen und die gleichzeitig sichtbaren Tage sind begrenzt, auch wenn die 16:9-Bildschirme das sehr verbessert haben.

zB Buß-und Bettagsformel: =wenn(Und(Rest(Datum,7)=5;Monat(Datum-28)=10);Zelleintrag "Buß-und-Bettag(Sachsen)": Aufruf Format EingeschränkterFeiertag

Hab die englischen VBA-Ausdrücke grad nicht alle parat, Datum ist eine Variable, die hochgezählt wird.

Nur als grobes Beispiel

Iamiam  21.06.2015, 22:42

wenn man nicht alles nachschaut... Muss heissen:

=wenn(Und(Rest(Datum,7)=5;Monat(Datum)=11;Monat(Datum-22)=10);...

0

also year, month, day können keine variablen sein, da eingabaute VBA funktionen.

year(date) liefert das aktuelle Jahr.

Year = Cells(1, 1) führt bei mir zu einer Fehlermeldung.

MarcMarcQuark 
Fragesteller
 19.06.2015, 11:59

Ja stimmt ich hab die Variablen Jahr Monat und Tag genannt.

0
PWolff  19.06.2015, 12:55

Du kannst ohne weiteres Year, Month und Day als Variablen deklarieren. (Natürlich ist es dann nicht mehr ganz so einfach, auf die eingebauten Funktionen mit diesen Namen zuzugreifen.)

Dim Year As Integer, Month As Integer, Day As Integer
Year = 2000 + Int(20 * Rnd())
Month = 1 + Int(12 * Rnd())
Day = 1 + Int(30 * Rnd())
Cells(1, 1).Value = DateSerial(Year, Month, Day)
Cells(2, 1).Value = DateTime.Year(Cells(1, 1))
Cells(3, 1).Value = DateTime.Month(Cells(1, 1))
Cells(4, 1).Value = DateTime.Day(Cells(1, 1))

-----

@ MarcMarcQuark, es ist dringend zu empfehlen, dass du im Menü "Extras" -> "Optionen", Registerkarte "Editor", Rahmen "Code-Einstellungen" den Haken bei "Variablendeklaration erforderlich" setzt. Bei bereits vorhandenen Dateien kannst du von Hand in die allererste Zeile

Option Explicit

schreiben. Dadurch werden derartige Fehler vermieden. Das macht die Unbequemlichkeit, mehr Dim-Statements zu brauchen, mehr als wett.

2