Kurzfassung — Eine
ComboBoxist eine Dropdownliste: einen Eintrag wählen oder (standardmäßig) den eigenen tippen. Füllen Sie sie mitComboBox1.List = Range("A2:A50").Value. Sie beantwortet zwei Fragen auf einmal — welcher Eintrag über.ListIndex(0-basiert,-1, wenn der Text nicht in der Liste steht) und welcher Text über.Value. Die Falle:.Value <> ""beweist nur, dass das Feld nicht leer ist, nicht, dass der Benutzer einen echten Eintrag gewählt hat. Brauchen Sie eine gültige Listenauswahl, testen Sie.ListIndex >= 0, oder verbieten Sie das Tippen mit.Style = fmStyleDropDownList.
' Eine ComboBox-Auswahl lesen - darauf bestehen, dass sie aus der Liste kommt
Private Sub cmdOK_Click()
If ComboBox1.ListIndex = -1 Then
MsgBox "Please choose an item from the list."
Exit Sub
End If
MsgBox "You chose " & ComboBox1.Value ' eine echte, durch die Liste gedeckte Auswahl
End Sub
Eine ComboBox ist ein Steuerelement auf einem UserForm, und sie folgt derselben
Regel wie jedes andere Steuerelement: Sie lesen die Auswahl über eine Eigenschaft, nicht am Feld selbst
ab. Der Unterschied zu einer ListBox ist, dass eine ComboBox eine Zeile zeigt
und Tippen annehmen kann — und genau dort wohnt der interessante Fehler.
Was Sie lernen
- Warum eine
ComboBoxeineListBoxist, die auf eine Zeile zusammengeklappt wurde, und sich fast genauso liest - Das Füllen mit
.List = Range.Valuein einem Zug oder.AddItemfür berechnete Elemente - Die zwei Fragen, die sie beantwortet: welche Zeile (
.ListIndex) und welcher Text (.Value) - Die Eigenschaft
.Style—fmStyleDropDownCombolässt den Benutzer tippen,fmStyleDropDownListnicht - Die Falle Nummer eins:
.Value <> ""ist keine gültige Auswahl; testen Sie.ListIndex >= 0 - Wann eine
ComboBoxdas richtige Steuerelement ist und wann eineListBoxbesser passt
Das Denkmodell: eine ListBox auf einer Zeile, die Sie auch tippen lässt
Eine ComboBox ist eine ListBox, zu einer einzelnen Zeile mit einem Auswahlpfeil
zusammengefaltet. Sie füllen sie genauso, und Sie lesen sie mit denselben zwei Eigenschaften — aber weil
sie auch freien Text annehmen kann, beantwortet sie immer zwei Fragen auf einmal:
ComboBox1.ListIndex ' WELCHE Zeile gewaehlt ist (0-basiert, -1 = Text nicht in der Liste)
ComboBox1.Value ' WELCHER Text im Feld steht (ein Listeneintrag ODER das Getippte)
Halten Sie diese beiden auseinander, und das Steuerelement ergibt Sinn. .Value ist was das Feld sagt.
.ListIndex ist ob das aus der Liste kam. Wählt der Benutzer aus der Dropdownliste, stimmen beide
überein. Tippt der Benutzer etwas Neues, hält .Value den getippten Text und .ListIndex ist -1 — das
Signal, dass der Text kein Listeneintrag ist.
Eine ComboBox füllen
Das Füllen ist identisch mit einer ListBox. Weisen Sie eine ganze Spalte auf einmal zu, das ist der
schnelle Weg:
Private Sub UserForm_Initialize()
ComboBox1.List = Sheet1.Range("A2:A50").Value ' ein Zug aus einer Spalte
End Sub
Range.Value ist ein 2-D-Array und .List akzeptiert eines, sodass eine einzige Zeile die Dropdownliste
lädt (siehe VBA Range). Verwenden Sie .AddItem nur für Elemente, die einzeln
aufgebaut werden:
Dim i As Long
For i = 1 To 12
ComboBox1.AddItem "Month " & i ' berechnete Elemente einzeln hinzufuegen
Next i
Rufen Sie ComboBox1.Clear auf, um sie vor dem Neubefüllen zu leeren. Soll das Feld von Anfang an einen
Standard zeigen, setzen Sie nach dem Füllen .ListIndex = 0, oder weisen Sie .Value einem bekannten
Eintrag zu.
Style: entscheiden, ob der Benutzer tippen darf
Das ist die Eigenschaft, die Leute übersehen. Eine ComboBox hat ein .Style, das ihren ganzen Charakter
steuert:
ComboBox1.Style = fmStyleDropDownCombo ' Standard: aus der Liste waehlen ODER selbst tippen
ComboBox1.Style = fmStyleDropDownList ' gesperrt: der Benutzer kann NUR einen Listeneintrag waehlen
fmStyleDropDownCombo ist der Standard — der Benutzer kann alles tippen. fmStyleDropDownList macht die
ComboBox zu einem strengen Wähler: Tippen springt nur zu passenden Einträgen, und der endgültige Wert ist
immer einer der Ihren. Darf Ihr Formular keinen freien Text annehmen, setzen Sie das .Style — versuchen
Sie nicht, es nachträglich wegzuvalidieren.
Die Falle Nummer eins: ein nicht leeres Feld ist keine gültige Auswahl
Hier ist der Fehler, der schlechte Daten durchlässt. Mit dem Standard-Style kann der Benutzer einen Wert tippen, der nicht in Ihrer Liste steht. Prüft Ihr Code nur, dass das Feld nicht leer ist, nimmt er den Tippfehler bereitwillig an:
' WRONG - accepts anything the user typed
If ComboBox1.Value <> "" Then ProcessOrder ComboBox1.Value
' RIGHT - insist the choice came from the list
If ComboBox1.ListIndex >= 0 Then
ProcessOrder ComboBox1.Value
Else
MsgBox "Please choose an item from the list, not free text."
End If
.Value <> "" beweist nur, dass irgendetwas im Feld steht. .ListIndex >= 0 beweist, dass der Benutzer
einen tatsächlichen Listeneintrag gewählt hat — denn .ListIndex ist -1, sobald der Text getippt statt
gewählt wurde. Die Regel ist einfach: Wenn eine gültige Listenauswahl zählt, testen Sie .ListIndex, nie
.Value <> "". Soll freier Text überhaupt nie möglich sein, liegt die sauberere Lösung weiter oben —
setzen Sie .Style = fmStyleDropDownList, und die Falle kann gar nicht erst auftreten. (Es gibt auch eine
.MatchRequired-Eigenschaft, die einen getippten Nichttreffer ablehnt, sobald das Feld den Fokus verliert,
aber das .Style zu setzen ist das gröbere, sicherere Werkzeug.)
Value gegenüber Text und auf eine Änderung reagieren
Bei einer ComboBox lesen .Value und .Text meist dieselbe Zeichenfolge. Das, was Sie verwenden werden,
ist .Value. .Text zählt, wenn es Ihnen darum geht, was während des Tippens angezeigt wird, bevor die
Eingabe bestätigt ist. Um in dem Moment zu reagieren, in dem der Benutzer die Auswahl ändert, behandeln Sie
das Change-Ereignis:
Private Sub ComboBox1_Change()
' feuert bei jedem Tastendruck und jeder Auswahl - halten Sie es leicht
Label1.Caption = "Current: " & ComboBox1.Value
End Sub
Weil Change bei jedem Tastendruck in einer tippbaren ComboBox feuert, halten Sie diesen Handler günstig
— führen Sie nicht bei jedem Zeichen eine Datenbankabfrage aus.
ComboBox oder ListBox? Wählen Sie nach Platz und Anzahl
Eine ComboBox und eine ListBox teilen ihre Füll- und Leseeigenschaften, wählen
Sie also danach, wie sich die Auswahl verhalten soll. Verwenden Sie eine ComboBox, wenn die Antwort ein
einzelner Wert ist, der Platz knapp ist und eine zusammengeklappte Dropdownliste aufgeräumter wirkt —
oder wenn Sie freies Tippen erlauben wollen. Verwenden Sie eine ListBox, wenn die Optionen auf einen
Blick sichtbar sein sollen oder der Benutzer mehr als eine wählen darf; die Mehrfachauswahl ist ein
Merkmal, das nur die ListBox hat. Eine ComboBox kann nie mehrere Einträge zurückgeben.
Wie ExcelMaster hilft
Der leise Fehler hier ist eine ComboBox, die annimmt, was immer der Benutzer tippt, weil der Code
.Value <> "" statt .ListIndex >= 0 geprüft hat — sodass ein falsch geschriebener Produktname direkt in
Ihre Daten fließt.
ExcelMaster lässt Sie das
Steuerelement in einfachen Worten beschreiben — « eine Dropdownliste mit Produktcodes, aus der der Benutzer
wählen muss, kein freier Text » — und es setzt das richtige .Style, füllt die Liste aus Ihren Daten und
liest die Auswahl, indem es .ListIndex testet, sodass nur echte Auswahlen durchkommen. Sie behalten die
Arbeitsmappe und den Code.
Häufig gestellte Fragen
Wie fülle ich eine ComboBox in VBA aus einem Bereich?
Weisen Sie den Bereich in einer einzigen Anweisung .List zu:
ComboBox1.List = Sheet1.Range("A2:A50").Value. Weil Range.Value ein 2-D-Array ist und .List eines
akzeptiert, lädt das die ganze Spalte auf einmal. Verwenden Sie .AddItem nur für Elemente, die Sie
einzeln aufbauen, und rufen Sie .Clear auf, bevor Sie ein Feld neu befüllen, das bereits Zeilen hat.
Wie hole ich den ausgewählten Wert aus einer VBA-ComboBox?
Lesen Sie .Value für den Text des aktuellen Eintrags und .ListIndex für die 0-basierte Zeile, aus der
er stammt. .ListIndex ist -1, wenn der Text getippt statt aus der Liste gewählt wurde, prüfen Sie also
.ListIndex >= 0, bevor Sie auf .Value hin handeln, wenn Sie eine echte Listenauswahl verlangen.
Wie hindere ich den Benutzer daran, freien Text in eine ComboBox zu tippen?
Setzen Sie ComboBox1.Style = fmStyleDropDownList. Das sperrt das Steuerelement auf Listeneinträge —
Tippen springt nur zu passenden Einträgen, und der endgültige Wert ist immer einer der Ihren. Der Standard,
fmStyleDropDownCombo, erlaubt freies Tippen, weshalb die Validierung mit .ListIndex >= 0 zählt, wenn Sie
ihn beibehalten.
Was bedeutet ListIndex = -1 bei einer ComboBox?
Es bedeutet, dass der aktuelle Text keiner der Listeneinträge ist — entweder ist das Feld leer, oder der
Benutzer hat etwas getippt, das nicht passt. Eine gültige Auswahl aus der Dropdownliste ergibt immer einen
.ListIndex von 0 oder größer, sodass .ListIndex = -1 Ihr Signal ist, die Eingabe abzulehnen oder
erneut nachzufragen.
Was ist der Unterschied zwischen einer ComboBox und einer ListBox?
Eine ComboBox zeigt eine Zeile mit einer Dropdownliste, gibt einen einzelnen Wert zurück und kann freies
Tippen erlauben; eine ListBox zeigt mehrere Zeilen auf einmal und kann
Mehrfachauswahl erlauben. Wählen Sie eine ComboBox für eine kompakte Einzelauswahl, eine ListBox, wenn
Optionen sichtbar sein müssen oder der Benutzer mehr als eine wählt.
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 25.09.2026.
Verwandte Anleitungen: VBA ListBox · VBA CheckBox · VBA UserForm · VBA Range · VBA InputBox
