Excel - Combobox in Useform nach change-Event leeren

Excelmania

Lieutenant
Registriert
Apr. 2010
Beiträge
794
Hallo.

Ich habe eine einfache Useform mit der ich über die Tabellenblätter navigieren kann. Gerne würde ich nach dem Change-Event die Combox wieder blank haben vollen. Die Befehle Clear oder = "" funktionieren jedoch im Change nicht.

Mache ich eventuell etwas falsch?

Code:
Private Sub UserForm_layout()
With Me

.Top = 125
.Left = ActiveWindow.Left + ActiveWindow.Width - Me.Width ' Position rechts
End With
End Sub

Private Sub UserForm_Initialize()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
BlattAuswaehlen.AddItem ws.Name
Next ws
End Sub

Private Sub BlattAuswaehlen_Change()
With Worksheets(BlattAuswaehlen.Value)
.Activate
End With


End Sub
 
Wenn der Inhalt (also die Liste) bleiben soll, nur nichts ausgewählt sein soll, versuchs mit ".ListIndex = -1".

Zumindest "leere" ich meine ComboBoxen auf meinem Startsheet damit. Ich vermute, in nem Userform gehts ähnlich.
 
Hallo.

vielen Dank. Klappt leider nicht. In der Change-Prozedur kommt es immer zum Laufzeitfehler 9.

Code:
Private Sub BlattAuswaehlen_Change()
With Worksheets(BlattAuswaehlen.Value)
.Activate
End With
With Me.BlattAuswaehlen
.ListIndex = -1
End With
End Sub
Ergänzung ()

Klappt nun. Wenn auch nicht schön aber selten^^

Code:
Unload Me
UF_Navi.Show vbModeless
 
Zuletzt bearbeitet:
Ich schriebs nicht gerne, aber das hat Bing mit GPT ausgespuckt...keine Ahnung ob das läuft, habs nicht getestet.

Hab deine Frage einfach da rein copy pasted :-)

*******

Hallo! Wenn ich es richtig verstehe, möchtest du nach dem Change-Event die ComboBox wieder leer haben. Du könntest versuchen, den Wert der ComboBox auf Null zu setzen. Hier ist ein Beispielcode:

Private Sub ComboBox1_Change()
' Dein Code hier
Me.ComboBox1.Value = Null
End Sub

Hoffe das hilft dir weiter!

********

Probiers mal aus, würde mich interessieren, obs geht :-)
 
Zuletzt bearbeitet:
Excelmania schrieb:
Hallo.

vielen Dank. Klappt leider nicht. In der Change-Prozedur kommt es immer zum Laufzeitfehler 9.

Code:
Private Sub BlattAuswaehlen_Change()
With Worksheets(BlattAuswaehlen.Value)
.Activate
End With
With Me.BlattAuswaehlen
.ListIndex = -1
End With
End Sub
Wo kommt der Fehler denn?

Code:
Private Sub CommandButton2_Click()
With Me.ComboBox1
.ListIndex = -1
End With
End Sub
Funktioniert bei mit im Test ohne Probleme.

@Janush "Null" geht anstelle von "-1" ebenso.
 
Um die ComboBox nach dem Ändern des ausgewählten Werts zu leeren, können Sie den Befehl ".Clear" im "BlattAuswaehlen_Change" Ereignis verwenden. Hier ist ein Beispielcode:

vbnetCopy code
Private Sub BlattAuswaehlen_Change()
With Worksheets(BlattAuswaehlen.Value)
.Activate
End With
BlattAuswaehlen.Clear 'Leert die ComboBox
End Sub

Dieser Code wird die ausgewählte Tabelle aktivieren und dann die ComboBox leeren, so dass der Benutzer eine neue Auswahl treffen kann.
 
Ich habe es mir jetzt auch nochmal angeschaut, der Fehler liegt in der Verwendung des ChangeEvents. Wenn der ComboBox Wert wieder auf nichts gestellt wird, löst das genauso das ChanngeEvent aus. Dann gibt's aber kein Blatt mit leerem Namen.

Dieser Fall muss also abgefangen werden und dann geht es auch mit einem ChangeEvent.

Code:
Private Sub BlattAuswaehlen_Change()

If BlattAuswaehlen.ListIndex > -1 Then Worksheets(BlattAuswaehlen.Value).Activate

BlattAuswaehlen.Value = Null

End Sub

.clear funktioniert in diesem Fall nicht, denn es löscht alle Inhalte der Combobox und setzt sie nicht nur auf eine leere Auswahl zurück :-)

.listindex = -1 geht auch :-)

Dieser Code wird die ausgewählte Tabelle aktivieren und dann die ComboBox leeren, so dass der Benutzer eine neue Auswahl treffen kann.

Das ist falsch und klingt irgendwie nach ChatGPT....die ComoBox wird tatsächlich geleert, aber man kann auch keine Auswahl mehr treffen.
 
  • Gefällt mir
Reaktionen: spcqike
Zurück
Oben