Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!
Option Compare Database
Option Explicit
Public Function Ostersonntag( _
Optional ByVal Jahr As Integer _
) As Variant
Dim D1 As Integer
Dim D2 As Integer
Dim D3 As Integer
Dim D4 As Integer
'Formel nach C.F.Gauss gilt 1583 - 8202:
If Jahr = 0 Then Jahr = Year(Now)
If Jahr < 1583 Or Jahr > 8202 Then _
Err.Raise 5 'Invalid argument'
'Berechnung der Korrekturwerte:
D1 = (8 * (Jahr \ 100) + 13) \ 25 - 2
D2 = (Jahr \ 100) - (Jahr \ 400) - 2
D1 = (15 + D2 - D1) Mod 30
D3 = 2 * (Jahr Mod 4) + 4 * (Jahr Mod 7)
D4 = (D1 + 19 * (Jahr Mod 19)) Mod 30
If D4 = 29 Then
D4 = 28
ElseIf D4 = 28 Then
If (Jahr Mod 19) > 10 Then D4 = 27
End If
D3 = (6 + D2 + D3 + 6 * D4) Mod 7
'Berechnung des Datums (ausgehend vom 22.3.):
Ostersonntag = DateSerial(Jahr, 3, 22 + D4 + D3)
End Function
Public Function FeiertagV( _
Optional ByVal Datum As Variant _
) As String
Dim Tage As Integer
If IsMissing(Datum) Then Datum = Now
Tage = DateDiff("d", Ostersonntag(Year(Datum)), Datum)
Select Case Tage 'relativ zu Ostersonntag
Case -2: FeiertagV = "Karfreitag"
Case 0: FeiertagV = "Ostersonntag"
Case 1: FeiertagV = "Ostermontag"
Case 39: FeiertagV = "Christi Himmelfahrt"
Case 49: FeiertagV = "Pfingsonntag"
Case 50: FeiertagV = "Pfingstmontag"
Case 60: FeiertagV = "Fronleichnam"
End Select
End Function
Public Function Feiertag( _
Optional ByVal Datum As Variant _
) As String
Dim TagMonat As Integer
If IsMissing(Datum) Then Datum = Now
TagMonat = Day(Datum) * 100 + Month(Datum)
Select Case TagMonat 'im Format DDMM
Case 101: Feiertag = "Neujahr"
Case 601: Feiertag = "Dreikönigstag *"
Case 105: Feiertag = "Tag der Arbeit"
Case 1508: Feiertag = "Mariä Himmelfahrt *"
Case 310: Feiertag = "deutsche Einheit"
Case 111: Feiertag = "Allerheiligen"
Case 2412: Feiertag = "Heiligabend *"
Case 2512: Feiertag = "1. Weihnachtstag"
Case 2612: Feiertag = "2. Weihnachtstag"
Case 3112: Feiertag = "Silvester *"
Case Else: Feiertag = FeiertagV(Datum)
End Select
End Function
Function IstFeiertag( _
Optional ByVal Datum As Variant _
) As Boolean
IstFeiertag = Len(Feiertag(Datum)) > 0
End Function
Private Sub Form_Click() 'Gibt alle Feiertage eines Jahres aus
Dim Jahr As Integer
Dim Datum As Variant
'Cls
Jahr = Year(Now)
Debug.Print "Feiertage im Jahr"; Jahr
For Datum = DateSerial(Jahr, 1, 1) To DateSerial(Jahr, 12, 31)
If IstFeiertag(Datum) Then Debug.Print Datum, Feiertag(Datum)
Next Datum
End Sub
Function ArbeitstageZaehlen(StartDate As Date, EndDate As Date) As Long
Dim CurrentDate As Date
Dim WorkingDays As Long
CurrentDate = StartDate
WorkingDays = 0
Do While CurrentDate <= EndDate
' Wochentag prüfen (vbMonday = 2, vbSunday = 1)
' 1 = Sonntag, 7 = Samstag
If Weekday(CurrentDate, vbMonday) <= 5 Then ' Montag bis Freitag (1 bis 5)
WorkingDays = WorkingDays + 1
End If
CurrentDate = CurrentDate + 1 ' Nächster Tag
Loop
ArbeitstageZaehlen = WorkingDays
End Function