ich hab mal wieder ein Problem, bei dem ich nicht weiter komme. Ich habe hier eine Möglichkeit gefunden mit 3 Comboboxen ein Jahr, Monat und Tag auszuwählen.
Leider kann ich die Boxen nicht an meine Anforderungen anpassen.
Folgende Vorgaben habe ich.
1. In der Combobox_Jahr soll immer der Wert aus A1 des aktiven Blattes stehen. Hier steht immer ein Datum im Format JJJJ.
2. In den Comboboxen Monat und Tag sollen dann der entsprechende Werte stehen. Hier soll aber kein Wert vorausgewählt sein, also Index-1.
Kann mir das bitte Jemand umschreiben.
Für die Hilfe und Mühe bedanke ich mich.
Private Sub UserForm_Initialize()
' Eigenschaft setzen damit der Code im Change
' der ComboBoxen bei Auswahl (z.B. ComboBox_Tag.Value = ... )
' nicht ausgeführt wird
ComboBox_Tag.Tag = "1"
Me.StartUpPosition = 0 ' Startposition der Userform links oben
' Tage des aktuellen Monats in ComboBox_Tag eintragen
For InI = 1 To Day(CDate("01." & Month(Date) + 1 & "." _
& Year(Date)) - 1)
ComboBox_Tag.AddItem InI
Next InI
For InI = 1 To 12 ' Monate als Wort in ComboBox_Monat eintragen
ComboBox_Monat.AddItem Format(DateSerial(1900, InI, 1), "MMMM")
Next InI
' Jahre in Combobox_Jahr eintragen
For InI = 1900 To 2222
ComboBox_Jahr.AddItem InI
Next InI
ComboBox_Tag.Value = Day(Date) ' Aktuelles Datum als Startwert setzen
ComboBox_Monat.Value = Format(Date, "MMMM")
ComboBox_Jahr.Value = Year(Date)
ComboBox_Tag.ListRows = 31 ' Länge der angezeiten Liste für Tag und Monat anpassen
ComboBox_Monat.ListRows = 12
ComboBox_Tag.Tag = "" ' Eigenschaft zurücksetzen
End Sub
Private Sub ComboBox_Monat_Change()
If ComboBox_Tag.Tag = "1" Then Exit Sub ' Start der UserForm
' Eigenschaft setzen damit der Code im Change Ereignis der ComboBox1
' beim Auswahl (ComboBox_Tag.ListIndex =... ) nicht ausgeführt wird
ComboBox_Monat.Tag = 1
' ausgewählte Zeile in ComboBox_Tag merken,
' da ComboBox_Tag gelöscht geleert wird
ByWert = ComboBox_Tag.ListIndex
ComboBox_Tag.Clear ' ComboBox_Tag leeren
If ComboBox_Monat.ListIndex = 11 Then ' Dezember gewählt
For InI = 1 To 31
ComboBox_Tag.AddItem InI
Next InI
Else
' Ende Schleife 1. des Folgemonats -1,
' damit Monatsende vom ausgewählten Monat
For InI = 1 To Day(CDate("01." _
& ComboBox_Monat.ListIndex + 2 & "." & ComboBox_Jahr) - 1)
ComboBox_Tag.AddItem InI
Next InI
End If
' ausgewählten Tag in ComboBox_Tag wieder anzeigen
If ByWert > ComboBox_Tag.ListCount - 1 Then
' falls ausgewählter Tag größer als Tage
' im ausgewählten Monat, wird der letzten Tag angezeigt
ComboBox_Tag.ListIndex = ComboBox_Tag.ListCount - 1
Else
ComboBox_Tag.ListIndex = ByWert
End If
ComboBox_Monat.Tag = "" ' Eigenschaft zurücksetzen
End Sub
Private Sub ComboBox_Jahr_Change()
If ComboBox_Tag.Tag = "" Then
' Schleife verlassen, wenn Monat verschieden von Februar
If ComboBox_Monat.ListIndex = 1 Then
' Eigenschaft setzen damit der Code im
' Change Ereignis der ComboBox_Tag beim Auswahl
' (ComboBox_Tag.ListIndex =... ) nicht ausgeführt wird
ComboBox_Monat.Tag = 1
' ausgewählte Zeile in ComboBox_Tag merken,
' da ComboBox_Tag gelöscht geleert wird
ByWert = ComboBox_Tag.ListIndex
' Tage entsprechend Jahr und Monat füllen
ComboBox_Tag.Clear
For InI = 1 To Day(CDate("01.03." & ComboBox_Jahr) - 1)
ComboBox_Tag.AddItem InI
Next InI
If ByWert > ComboBox_Tag.ListCount - 1 Then
' falls ausgewählter Tag größer als Tage
' im ausgewählten Monat, wird der letzten Tag angezeigt
ComboBox_Tag.ListIndex = ComboBox_Tag.ListCount - 1
Else
ComboBox_Tag.ListIndex = ByWert
End If
ComboBox_Monat.Tag = "" ' Eigenschaft zurücksetzen
End If
End If
End Sub
mfg, Andreas