Guten Abend,
Ich habe über das Userform einen Monatskalender mit zwei Buttons links und rechts erstellt, um die Monate vor- und zurückzublättern. Außerdem soll der Monat im Format „Januar 2025“ angezeigt werden. Momentan habe ich jedoch ein Problem: Die Monate von März bis August werden im Format „Mai 2025“ angezeigt, während die Monate von August bis Februar des nächsten Jahres nur im Format „Januar“ (ohne Jahr) dargestellt werden. Ich möchte jedoch, dass alle 12 Monate im Format „Monat, Jahr“ angezeigt werden. Hier ist der komplette Code, den ich verwendet habe:
Private Sub KalenderAnzeigen(ByVal monat As Integer, ByVal Jahr As Integer)
Dim korrektesDatum As Date
Dim ersterTag As Date
Dim startTag As Integer
Dim tageImMonat As Integer
Dim i As Integer
Dim tagNummer As Integer
Dim cmd As MSForms.CommandButton
Dim aktuellesDatum As Date
Dim wochentag As Integer
Dim iHeute As Integer
' --- Monat & Jahr aus sicherem Datum ableiten ---
korrektesDatum = DateSerial(Jahr, monat, 1)
monat = Month(korrektesDatum)
Jahr = Year(korrektesDatum)
' --- Monatsüberschrift anzeigen --- lblMonatJahr ist Name des Beschriftungfelds wo das Monat und Jahr angezeigt werden soll
lblMonatJahr.Caption = Format(korrektesDatum, "MMMM YYYY")
' --- Wochentage setzen ---
Dim wochentage As Variant
wochentage = Array("Mo", "Di", "Mi", "Do", "Fr", "Sa", "So")
For i = 0 To 6
Me.Controls("lblWochentag" & (i + 1)).Caption = wochentage(i)
Next i
' --- Daten vorbereiten ---
ersterTag = korrektesDatum
startTag = Weekday(ersterTag, vbMonday)
tageImMonat = Day(DateSerial(Jahr, monat + 1, 0))
' --- Buttons zurücksetzen ---
For i = 1 To 42
Set cmd = Me.Controls("cmdTag" & i)
With cmd
.Caption = ""
.Visible = False
.Enabled = False
.BackColor = RGB(240, 240, 240)
.Font.Bold = False
.ForeColor = RGB(0, 0, 0)
End With
Next i
' --- Tage eintragen ---
For i = 1 To tageImMonat
tagNummer = i + startTag - 1
Set cmd = Me.Controls("cmdTag" & tagNummer)
aktuellesDatum = DateSerial(Jahr, monat, i)
wochentag = Weekday(aktuellesDatum, vbMonday)
With cmd
.Caption = i
.Visible = True
.Enabled = True
' --- Farbliche Hervorhebung ---
If aktuellesDatum = Date Then
.BackColor = RGB(67, 205, 128) ' Heute
ElseIf wochentag = 6 Then
.BackColor = RGB(255, 220, 180) ' Samstag
ElseIf wochentag = 7 Then
.BackColor = RGB(255, 170, 170) ' Sonntag
Else
.BackColor = RGB(240, 240, 240) ' Normal
End If
End With
Next i
' --- Heute markieren und fokussieren ---
If monat = Month(Date) And Jahr = Year(Date) Then
iHeute = Day(Date) + startTag - 1
If iHeute >= 1 And iHeute <= 42 Then
With Me.Controls("cmdTag" & iHeute)
If .Visible Then
.SetFocus
.Font.Bold = True
.ForeColor = RGB(0, 100, 0)
.ControlTipText = "Heute: " & Format(Date, "dddd, dd.mm.yyyy")
End If
End With
End If
End If
End Sub
Ich freue mich auf Ihre Unterstützung!
|