ich baue eine Userform mit zwei Comboboxen, wobei die zweite (ComboboxAbwesenheit) erst angezeigt wird, nachdem die erste (ComboboxMitarbeiter) ein gültiges Ergebnis hat.
Der Code ist unten einkopiert. Das klappt auch ganz ordentlich, aber weil das später eine Reihe von Anwendern benutzen, habe ich versucht, mal den "DAU" zu simulieren. Das Ergebnis war ein "GAU", konkret:
- Wenn der Anwender in der ersten Box die Nullzeile auswählt oder irgendeinen Quatsch eingibt (kein gültiger Listwert), soll er ja das Feld nochmal leer präsentiert bekommen. Das klappt in der ersten Runde auch, aber wenn er das dann nochmal macht, kommt ein Laufzeitfehler "kann nicht gebunden geöffnet werden" oder so. Es muss auch nicht unbedingt so gelöst sein wie ich das gemacht habe. Es würde schon reichen, wenn die ungültige Eingabe irgendwie anders vermieden werden kann.
- Leider funktioniert der Abbrechen-Button nicht immer. Kann es sein, dass das das Ereignis nicht immer abgefragt wird? Ich hatte schon mehrfach die Sitation, dass das Formular nicht ausgegangen ist und ich Excel nur durch den Taskmanager beenden konnte
Zu Hülf! Viele Grüße und vielen Dank im voraus!
Hans-Jürgen
Private Sub Userform_Initialize()
Dim lngZähler As Long
'Formular "Abwesenheiten pflegen"
With F0_AbwesenheitenPflegen
'Namensbox vorbereiten
.ComboBoxMitarbeiter.Text = vbNullString
'Weitere Elemente zunächst ausblenden
.LabelAbwesenheit.Visible = False
.ComboBoxAbwesenheit.Visible = False
'Namen aus der Datenbank in die Liste aufnehmen
.ComboBoxMitarbeiter.AddItem vbNullString
For lngZähler = 1 To UBound(varMitarbeiter())
.ComboBoxMitarbeiter.AddItem varMitarbeiter(lngZähler, 1)
Next
End With
End Sub
Private Sub ComboboxMitarbeiter_Keydown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As _
Integer)
If KeyCode = 9 Or KeyCode = 13 Then
ComboboxMitarbeiter_AfterUpdate
End If
End Sub
Private Sub ComboboxMitarbeiter_AfterUpdate()
Dim lngEintrag As Long
With F0_AbwesenheitenPflegen
'Nummer des gewählten Eintrags speichern
lngEintrag = F0_AbwesenheitenPflegen.ComboBoxMitarbeiter.ListIndex
'Wenn Eintrag gültig, nächste Abfrage starten, sonst zurücksetzen
If lngEintrag > 0 Then
.LabelAbwesenheit.Visible = True
.ComboBoxAbwesenheit.Visible = True
'hier kommt die nächste Combobox hin
'.ComboBoxAbwesenheit.Text = "Neue Abwesenheit erfassen"
Else
Application.EnableEvents = False
.ComboBoxMitarbeiter.Text = vbNullString
Unload F0_AbwesenheitenPflegen
Application.EnableEvents = True
.Show
End If
End With
End Sub
Private Sub ButtonÜbernehmen_Click()
MsgBox "wird später definiert"
End Sub
Private Sub ButtonAbbrechen_Click()
Unload F0_AbwesenheitenPflegen
End Sub