Befüllen der Comboboxen läuft schief
13.02.2024 13:39:08
Lefty
ich bins mal wieder ;D
Ich habe mir eine UF erstellt in der ich mit 3 Comboboxen (jeweils 1 für Tag, Monat und Jahr) das Datum eingeben und in eine Tabelle einfügen kann. Vielen Dank an der stelle an HaJo für den Code.
Nun wollte ich weitergehen und mir eine neue UF erstellen in der ich daten einer Tabelle lade, bearbeite und wieder in die Tabelle Speichere.
In dieser UF brauche ich allerdings 2x das Datum und somit 6 Comboboxen, die ersten Drei funktionieren einwandfrei, beim 2. Datum habe ich das Problem das ein Laufzeitfehler beim ändern des Monats auftritt (Laufzeitfehler 6, Überlauf).
Hier mal der gesamte Code aus der UF_Ferien
Private Sub UserForm_Initialize()
' Eigenschaft setzen damit der Code im Change
' der ComboBoxen bei Auswahl (z.B. ComboBox1.Value = ... )
' nicht ausgeführt wird
CBvonTag.Tag = "1"
Me.StartUpPosition = 1 ' Startposition der Userform links oben
' Tage des aktuellen Monats in ComboBox1 eintragen
For InI = 1 To Day(CDate("01." & Month(Date) + 1 & "." _
& Year(Date)) - 1)
CBvonTag.AddItem InI
Next InI
For InI = 1 To 12 ' Monate als Wort in ComboBox2 eintragen
CBvonMonat.AddItem Format(DateSerial(1900, InI, 1), _
"MMMM")
Next InI
' Jahre in Combobox3 eintragen
For InI = 1900 To 2222
CBvonJahr.AddItem InI
Next InI
CBvonTag.Value = Day(Date) ' Aktuelles Datum als Startwert setzen
CBvonMonat.Value = Format(Date, "MMMM")
CBvonJahr.Value = Year(Date)
CBvonTag.ListRows = 31 ' Länge der angezeiten Liste für Tag und Monat anpassen
CBvonMonat.ListRows = 12
CBvonTag.Tag = "" ' Eigenschaft zurücksetzen
' Eigenschaft setzen damit der Code im Change
' der ComboBoxen bei Auswahl (z.B. ComboBox1.Value = ... )
' nicht ausgeführt wird
CBbisTag.Tag = "1"
Me.StartUpPosition = 1 ' Startposition der Userform links oben
' Tage des aktuellen Monats in ComboBox1 eintragen
For InI = 1 To Day(CDate("01." & Month(Date) + 1 & "." _
& Year(Date)) - 1)
CBbisTag.AddItem InI
Next InI
For InI = 1 To 12 ' Monate als Wort in ComboBox2 eintragen
CBbisMonat.AddItem Format(DateSerial(1900, InI, 1), _
"MMMM")
Next InI
' Jahre in Combobox3 eintragen
For InI = 1900 To 2222
CBbisJahr.AddItem InI
Next InI
CBbisTag.Value = Day(Date) ' Aktuelles Datum als Startwert setzen
CBbisMonat.Value = Format(Date, "MMMM")
CBbisJahr.Value = Year(Date)
CBbisTag.ListRows = 31 ' Länge der angezeiten Liste für Tag und Monat anpassen
CBbisMonat.ListRows = 12
CBbisTag.Tag = "" ' Eigenschaft zurücksetzen
End Sub
Private Sub CBvonTag_Change()
' ausgewählte Zeile auf Variable schreiben
If CBvonMonat.Tag = "" Then ByWert = CBvonTag.ListIndex
End Sub
Private Sub CBbisTag_Change()
' ausgewählte Zeile auf Variable schreiben
If CBbisMonat.Tag = "" Then ByWert = CBbisTag.ListIndex
End Sub
Private Sub CBvonMonat_Change()
If CBvonTag.Tag = "1" Then Exit Sub ' Start der UserForm
' Eigenschaft setzen damit der Code im Change Ereignis der ComboBox1
' beim Auswahl (ComboBox1.ListIndex =... ) nicht ausgeführt wird
CBvonMonat.Tag = 1
' ausgewählte Zeile in ComboBox1 merken,
' da ComboBox1 gelöscht geleert wird
ByWert = CBvonTag.ListIndex
CBvonTag.Clear ' ComboBox1 leeren
If CBvonMonat.ListIndex = 11 Then ' Dezember gewählt
For InI = 1 To 31
CBvonTag.AddItem InI
Next InI
Else
' Ende Schleife 1. des Folgemonats -1,
' damit Monatsende vom ausgewählten Monat
For InI = 1 To Day(CDate("01." _
& CBvonMonat.ListIndex + 2 & "." & CBvonJahr) - 1)
CBvonTag.AddItem InI
Next InI
End If
' ausgewählten Tag in ComboBox1 wieder anzeigen
If ByWert > CBvonTag.ListCount - 1 Then
' falls ausgewählter Tag größer als Tage
' im ausgewählten Monat, wird der letzten Tag angezeigt
CBvonTag.ListIndex = CBvonTag.ListCount - 1
Else
CBvonTag.ListIndex = ByWert
End If
CBvonMonat.Tag = "" ' Eigenschaft zurücksetzen
End Sub
Private Sub CBbisMonat_Change()
If CBbisTag.Tag = "1" Then Exit Sub ' Start der UserForm
' Eigenschaft setzen damit der Code im Change Ereignis der ComboBox1
' beim Auswahl (ComboBox1.ListIndex =... ) nicht ausgeführt wird
CBvonMonat.Tag = 1
' ausgewählte Zeile in ComboBox1 merken,
' da ComboBox1 gelöscht geleert wird
ByWert = CBbisTag.ListIndex
CBbisTag.Clear ' ComboBox1 leeren
If CBbisMonat.ListIndex = 11 Then ' Dezember gewählt
For InI = 1 To 31
CBbisTag.AddItem InI
Next InI
Else
' Ende Schleife 1. des Folgemonats -1,
' damit Monatsende vom ausgewählten Monat
For InI = 1 To Day(CDate("01." _
& CBbisMonat.ListIndex + 2 & "." & CBvonJahr) - 1)
CBbisTag.AddItem InI
Next InI
End If
' ausgewählten Tag in ComboBox1 wieder anzeigen
If ByWert > CBbisTag.ListCount - 1 Then
' falls ausgewählter Tag größer als Tage
' im ausgewählten Monat, wird der letzten Tag angezeigt
CBbisTag.ListIndex = CBbisTag.ListCount - 1
Else
CBbisTag.ListIndex = ByWert
End If
CBbisMonat.Tag = "" ' Eigenschaft zurücksetzen
End Sub
Private Sub CBvonJahr_Change()
If CBvonTag.Tag = "" Then
' Schleife verlassen, wenn Monat verschieden von Februar
If CBvonMonat.ListIndex = 1 Then
' Eigenschaft setzen damit der Code im
' Change Ereignis der ComboBox1 beim Auswahl
' (ComboBox1.ListIndex =... ) nicht ausgeführt wird
CBvonMonat.Tag = 1
' ausgewählte Zeile in ComboBox1 merken,
' da ComboBox1 gelöscht geleert wird
ByWert = CBvonTag.ListIndex
' Tage entsprechend Jahr und Monat füllen
CBvonTag.Clear
For InI = 1 To Day(CDate("01.03." & CBvonJahr) - 1)
CBvonTag.AddItem InI
Next InI
If ByWert > CBvonTag.ListCount - 1 Then
' falls ausgewählter Tag größer als Tage
' im ausgewählten Monat, wird der letzten Tag angezeigt
CBvonTag.ListIndex = CBvonTag.ListCount - 1
Else
CBvonTag.ListIndex = ByWert
End If
CBvonMonat.Tag = "" ' Eigenschaft zurücksetzen
End If
End If
End Sub
Private Sub CBbisJahr_Change()
If CBbisTag.Tag = "" Then
' Schleife verlassen, wenn Monat verschieden von Februar
If CBbisMonat.ListIndex = 1 Then
' Eigenschaft setzen damit der Code im
' Change Ereignis der ComboBox1 beim Auswahl
' (ComboBox1.ListIndex =... ) nicht ausgeführt wird
CBbisMonat.Tag = 1
' ausgewählte Zeile in ComboBox1 merken,
' da ComboBox1 gelöscht geleert wird
ByWert = CBbisTag.ListIndex
' Tage entsprechend Jahr und Monat füllen
CBbisTag.Clear
For InI = 1 To Day(CDate("01.03." & CBbisJahr) - 1)
CBbisTag.AddItem InI
Next InI
If ByWert > CBbisTag.ListCount - 1 Then
' falls ausgewählter Tag größer als Tage
' im ausgewählten Monat, wird der letzten Tag angezeigt
CBbisTag.ListIndex = CBbisTag.ListCount - 1
Else
CBbisTag.ListIndex = ByWert
End If
CBbisMonat.Tag = "" ' Eigenschaft zurücksetzen
End If
End If
End Sub
'Private Sub btn_Eintragen_Click()
'
'With Tabelle4.ListObjects("tab_Termine").ListRows.Add
' .Range(, 1) = CDate(ComboBox1 & "." & ComboBox2 & "." & ComboBox3)
'
' '.Range(, 1).Value = txt_Datum.Value
' .Range(, 2).Value = txt_Anlass.Value
'
'
'End With
'
'Unload Me
'
'End Sub
'
und natürlich die Tabelle zum besseren Verständnis
https://www.herber.de/bbs/user/167030.xlsm
wen es dann um das befüllen und Speichern geht melde ich mich bestimmt wieder.
Vielen Dank schonmal für die Hilfe
Viele Grüße
Lefty
Anzeige