Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Feiertage markieren

Begonnen von alfini, April 13, 2025, 13:38:00

⏪ vorheriges - nächstes ⏩

alfini

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

werner budde

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.
Gruß Werner

Knobbi38

#2
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

alfini

Hallo Werner,

funktioniert einwandfrei.
Die Hinweise von Knobbi38 werde ich noch berücksichtigen.

Vielen Dank
Gruß alfini

werner budde

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 😉
Gruß Werner

andyfau

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



Beste Grüße
Andreas