Hallo Forum,
ich möchte Feiertage im Endlosform. farbig kennzeichnen.
Habe dazu eine Feiertagstab. angelegt.
Eine Abfrage für die Feiertage.
Wie kann ich die Feiertage in der Monatstab. markieren.
Für eure Mühe bedanke ich mich im voraus.
Gruß alfini
Hallo,
ich habe mal quick & dirty eine DB gebaut, siehe Anlage.
(Untypisch, die Profis hier werden die Augen verdrehen:
in der Abfrage habe ich die Feiertagstabelle und die Tabelle tbl_2025 über die Datumsfelder verknüpft)
im Formular habe ich einfach die Bedingte Formatierung verwendet mit der Möglichkeit ..
" ist nicht Null"
Nachtrag:
Ich merke gerade, dass das Formular keine Bearbeitung zulässt.
Hallo Werner,
ist schon alles richtig, aber du solltest schon PKs und einen Index auf die Datumsfelder setzen, dann geht auch das Update.
Besser wäre auch ein Left Join anstatt einem Right Join.
Gruß Knobbi38
Hallo Werner,
funktioniert einwandfrei.
Die Hinweise von Knobbi38 werde ich noch berücksichtigen.
Vielen Dank
Gruß alfini
Zitat von: knobbi38 am April 13, 2025, 17:28:09ist schon alles richtig, aber du solltest schon PKs und einen Index auf die Datumsfelder setzen ..
Ja, hast recht. Ich hatte da wohl einen Anfall von Hektik = "Erster sein wollen".
Gelobe Besserung 😉
Noch ein wenig Code für die, die keine Lust haben eine Feiertagstabelle zu pflegen.
(Ist nicht auf meinem Mist gewachsen, deshalb hier nochmal Danke an den Programmierer.)
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 = "Tag der deutschen 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