Andre steder på Eksperten har andre rodet med noget lignende. Så det er vel blot et spørgsmål om at få det tilpasset til den aktuelle opgave. I det ovenstående har det være ret "hemmeligt" men i må da godt se den kode som jeg har neglet fra
http://www.erlandsendata.no/english/index.php?d=enfunctionsdateholidays og forsøgt at tilpasse til danske forhold. Jeg bruger den til ikke at sende regninger, med en sidste rettidig indbetaling i en weekend eller en helligdag.
Function ErHelligdag(testDato As Long, InclLørdage As Boolean, InclSøndage As Boolean) As Boolean
Dim InputYear As Integer, PD As Long, OK As Boolean
If testDato <= 0 Then testDato = Date
InputYear = Year(testDato)
PD = Påskedag(InputYear)
OK = True
Select Case testDato
Case DateSerial(InputYear, 1, 1) ' Nytårsdag
Case PD - 7 ' Palmesøndag
Case PD - 3 ' Skærtorsdag
Case PD - 2 ' Langfredag
Case PD ' Påskedag
Case PD + 1 ' 2. påskedag
Case PD + 26 ' St. Bededag
Case PD + 39 ' Kristi Himmelfartsdag
Case PD + 49 ' Pinsedag
Case PD + 50 ' 2. Pinsedag
Case DateSerial(InputYear, 12, 24) ' Juleaftensdag
Case DateSerial(InputYear, 12, 25) ' Juledag
Case DateSerial(InputYear, 12, 26) ' 2. Juledag
Case DateSerial(InputYear, 12, 31) ' Nytårsaftensdag
Case Else
OK = False
If InclLørdage Then
If WeekDay(testDato, vbMonday) = 6 Then
OK = True
End If
End If
If InclSøndage Then
If WeekDay(testDato, vbMonday) = 7 Then
OK = True
End If
End If
End Select
IsHoliday = OK
End Function
Function Påskedag(InputYear As Integer) As Long
Dim d As Integer
d = (((255 - 11 * (InputYear Mod 19)) - 21) Mod 30) + 21
Påskedag = DateSerial(InputYear, 3, 1) + d + (d > 48) + 6 - ((InputYear + InputYear \ 4 + d + (d > 48) + 1) Mod 7)
End Function