Feiertage berechnen und berücksichtigen - Teil 1

Weitere variable Feiertage

Außerdem gibt es noch zwei weitere variable Feiertage, die zwar nicht ganz so wichtig sind, aber hier der Vollständigkeit halber aufgeführt werden sollen: Muttertag und Erntedankfest (Listing 5).

  • Das Erntedankfenster ist immer der erste Sonntag im Monat Oktober.

  • Der Muttertag ist immer der zweite Sonntag im Mai. Falls an diesem Sonntag Pfingsten liegt, wird Muttertag um eine Woche nach vorne geschoben.

Um diese Tage zu berechnen, sollten Sie sich eine Funktion programmieren, die den x-ten Sonntag eines bestimmten Monats berechnet. Diese Funktion können Sie dann verwenden, um beide Feiertage zu bestimmen.

Public Function SonntagImMonat(lngJahr As Long, _
bytMonat As Byte, bytSonntag As Byte) As Variant
Dim datTemp As Date
'Den ersten Sonntag suchen
datTemp = DateSerial(lngJahr, bytMonat, 1)
Do While Weekday(datTemp, vbSunday) > 1
datTemp = DateAdd("d", 1, datTemp)
Loop
'1. Sonntag gefunden
Select Case bytSonntag
Case 1:
SonntagImMonat = datTemp
Case 2:
SonntagImMonat = DateAdd("d", 7, datTemp)
Case 3:
SonntagImMonat = DateAdd("d", 14, datTemp)
Case 4:
SonntagImMonat = DateAdd("d", 21, datTemp)
Case 5:
SonntagImMonat = DateAdd("d", 28, datTemp)
Case Else
SonntagImMonat = "Der angegebene Sonntag liegt nicht in diesem Monat!"
End Select
'Prüfen, ob das berechnete Datum noch in dem
'gewünschten Monat liegt.
If Month(SonntagImMonat) > bytMonat Then
SonntagImMonat = "Der angegebene Sonntag liegt nicht in diesem Monat!"
End If
End Function
Public Function Erntedank(lngJahr As Long) As Date
Erntedank = SonntagImMonat(lngJahr, 10, 1)
End Function
Public Function Muttertag(lngJahr As Long) As Date
Muttertag = SonntagImMonat(lngJahr, 5, 2)
If Muttertag = Pfingstsonntag(lngJahr) Then
Muttertag = DateAdd("d", -7, lngJahr)
End If
End Function