Feiertage berechnen und berücksichtigen - Teil 1

Von Weihnachten abhängige Feiertage

Neben Feiertagen, die von Ostern abhängig sind, gibt es auch einige, die Weihnachten als Bezugspunkt haben. Nun ist Weihnachten nicht das Problem, weil der erste Weihnachtstag in jedem Jahr auf den 25.12. fällt und Heiligabend immer am 24.12. ist. Allerdings müssen Sie zur Berechnung des ersten Advents berücksichtigen, dass der 1.Advent immer ein Sonntag ist, der 24.12. jedoch nicht. Fällt der 24.12. auf einen Sonntag, sind 4. Advent und Heiligabend identisch. Für die Berechnung sollten Sie also zunächst prüfen, ob der 24.12. des Jahres ein Sonntag ist. In diesem Fall ergibt sich der erste Advent aus dem 24.12. abzüglich 21 Tage (Listing 4). Andernfalls müssen Sie zunächst den vorherigen Sonntag ermitteln, das ist der 4. Advent, und davon ebenfalls 3 Wochen abziehen, um den ersten Advent zu berechnen.Ausgehend vom ersten Advent, können Sie die anderen Adventssonntage ermitteln. Weitere Feiertage berechnen sich wie folgt:

  • Buß- und Bettag liegt 11 Tage vor dem ersten Advent.

  • Totensonntag ist der Sonntag vor dem ersten Advent.

  • Volkstrauertag liegt 14 Tage vor dem ersten Advent und eine Woche vor Totensonntag.

Public Function Advent1(lngJahr As Long) As Date
Dim datTemp As Date
Dim bytWochentag As Byte
'Prüfen, ob der 24. ein Sonntag ist
datTemp = DateSerial(lngJahr, 12, 24)
bytWochentag = Weekday(datTemp, 1)
If bytWochentag = 1 Then
Advent1 = DateAdd("d", -3 * 7, datTemp)
Else
Advent1 = DateAdd("d", -(3 * 7) - bytWochentag + 1, datTemp)
End If
End Function
Public Function Advent3(lngJahr As Long) As Variant
Dim varTemp As Variant
varTemp = Advent1(lngJahr)
If IsDate(varTemp) Then
Advent3 = DateAdd("d", 14, varTemp)
Else
Advent3 = varTemp 'Fehlermeldung zurückgeben
End If
End Function
Public Function Advent2(lngJahr As Long) As Variant
Dim varTemp As Variant
varTemp = Advent1(lngJahr)
If IsDate(varTemp) Then
Advent2 = DateAdd("d", 7, varTemp)
Else
Advent2 = varTemp 'Fehlermeldung zurückgeben
End If
End Function
Public Function Advent4(lngJahr As Long) As Variant
Dim varTemp As Variant
varTemp = Advent1(lngJahr)
If IsDate(varTemp) Then
Advent4 = DateAdd("d", 21, varTemp)
Else
Advent4 = varTemp 'Fehlermeldung zurückgeben
End If
End Function
Public Function Bussundbettag(lngJahr As Long) As Variant
Dim varTemp As Variant
varTemp = Advent1(lngJahr)
If IsDate(varTemp) Then
Bussundbettag = DateAdd("d", -11, varTemp)
Else
Bussundbettag = varTemp 'Fehlermeldung zurückgeben
End If
End Function
Public Function Volkstrauertag(lngJahr As Long) As Variant
Dim varTemp As Variant
varTemp = Advent1(lngJahr)
If IsDate(varTemp) Then
Volkstrauertag = DateAdd("d", -14, varTemp)
Else
Volkstrauertag = varTemp 'Fehlermeldung zurückgeben
End If
End Function
Public Function Totensonntag(lngJahr As Long) As Variant
Dim varTemp As Variant
varTemp = Advent1(lngJahr)
If IsDate(varTemp) Then
Totensonntag = DateAdd("d", -7, varTemp)
Else
Totensonntag = varTemp 'Fehlermeldung zurückgeben
End If
End Function