VBA – Listenfeld
In this Article
In diesem Tutorial zeigen wir Ihnen, wie Sie mit Listenfeldern in VBA arbeiten können.
In VBA können Sie ein Listenfeld erstellen, in dem der Benutzer eine der darin aufgelisteten Optionen auswählen kann. Listenfelder werden häufig in Benutzerformularen verwendet, können aber auch in Arbeitsblättern eingesetzt werden. In diesem Tutorial lernen Sie, wie Sie ein Listenfeld erstellen, befüllen und leeren können. Sie werden auch sehen, wie Sie eine Benutzerauswahl in VBA ermitteln und im Code verwenden können.
Wenn Sie lernen möchten, wie man eine Kombinationseld erstellt, klicken Sie hier: VBA-Kombinationsfeld
Wenn Sie lernen möchten, wie man ein Kontrollkästchen erstellt, klicken Sie hier: VBA-Kontrollkästchen
Ein Listenfeld erstellen
Um ein Listenfeld in das Arbeitsblatt einzufügen, müssen Sie auf die Registerkarte Entwicklertools gehen. klicken Sie dann auf Einfügen und wählen Sie Listenfeld unter ActiveX-Steuerelemente:
Abbildung 1. Einfügen eines Listenfeldes in das Arbeitsblatt
Wenn Sie das eingefügte Listenfeld auswählen, können Sie auf der Registerkarte Entwicklertools auf Eigenschaften klicken:
Abbildung 2. Listenfeldeigenschaften ändern
Hier können Sie verschiedene Eigenschaften eines Listenfeldes einstellen. Für den Anfang haben wir das Attribut Name in lstListBox geändert. Jetzt können wir das Listenfeld mit diesem Namen im VBA-Code verwenden.
Befüllen eines Listenfeldes im VBA-Code
Zunächst müssen wir das Listenfeld mit Werten belegen. In den meisten Fällen muss ein Listenfeld mit Werten belegt werden, wenn die Arbeitsmappe geöffnet wird. Aus diesem Grund müssen wir einen Code zum Befüllen des Listenfeldes in die Prozedur Workbook_open() des Workbook-Objekts einfügen. Diese Prozedur wird jedes Mal ausgeführt, wenn ein Benutzer die Arbeitsmappe öffnet. Hier ist der Code:
Workbook_open()
With Tabelle1.lstListBox
.AddItem "John"
.AddItem "Michael"
.AddItem "Jennifer"
.AddItem "Lilly"
.AddItem "Robert"
End With
End Sub
Wie Sie in Abbildung 3 sehen können, haben wir unser Listenfeld mit 5 Namen (John, Michael, Jennifer, Lilly und Robert) belegt:
Abbildung 3. Das Listenfeld in VBA befüllen
Ein Listenfeld aus einem Zellenbereich befüllen
Eine weitere Möglichkeit, ein Listenfeld zu befüllen, besteht darin, es dem Benutzer zu überlassen. Ein Listenfeld kann mit einem Zellenbereich verknüpft werden. Daher wird das Listenfeld jedes Mal, wenn der Benutzer einen neuen Wert in den Zellenbereich eingibt, mit diesem aktualisiert.
Wenn Sie dies aktivieren möchten, müssen Sie den Zellenbereich in das Attribut ListFillRange unter Eigenschaften des Listenfeldes eingeben:
Abbildung 4. Das Listenfeld aus dem Zellenbereich befüllen
Wir haben unser Listenfeld mit dem Bereich E2:E5 verknüpft, in den wir die gewünschten Namen (Nathan, Harry, George, Roberta) eintragen. Das Ergebnis ist die Tatsache, dass das Listenfeld jetzt mit diesen Namen belegt ist.
Ein ausgewähltes Element eines Listenfeldes in VBA abrufen
Der Zweck eines Listenfeldes besteht darin, die Auswahl eines Benutzers zu erhalten. Um einen Wert abzurufen, der von einem Benutzer ausgewählt wurde, müssen Sie diesen Code verwenden:
Dim strAusgewaehltesElement As Variant
strAusgewaehltesElement = Tabelle1.lstListBox.Value
Die Auswahl des Benutzers steht im Attribut Value des Objekts Tabelle1.lstListbox. Dieser Wert wird der Variablen strAusgewaehltesElement zugewiesen:
Abbildung 5. Einen ausgewählten Wert aus dem Listenfeld in VBA abrufen
Wir haben Harry im Listenfeld ausgewählt und die Prozedur ausgeführt. Wie Sie in Abbildung 5 sehen können, lautet der Wert von strAusgewaehltesElement Harry, also der Wert, den wir ausgewählt haben. Außerdem können Sie diese Variable im Code verarbeiten.
Ein Listenfeld leeren
Um die Elemente eines Listenfeldes in VBA zu löschen, müssen Sie die Methode Clear des Objekts Tabelle1.lstListBox verwenden. Damit werden alle Elemente aus dem Listenfeld gelöscht. Hier ist der Code:
Tabelle1.lstListBox.Clear
Wenn wir den Code ausführen, erhalten wir ein leeres Listenfeld:
Abbildung 6. Die Elemente eines Listenfeldes löschen
Verwendung eines Listenfeldes in einem Benutzerformular
Wie wir bereits erwähnt haben, wird das Listenfeld am häufigsten in Benutzerformularen verwendet. Um zu erklären, wie das geht, fügen wir zunächst ein Benutzerformular ein. Klicken Sie im VBA-Editor mit der rechten Maustaste auf den Modulnamen, klicken Sie auf Einfügen und wählen Sie UserForm:
Abbildung 7. Einfügen eines Benutzerformulars
Um die Steuerelemente zum Einfügen anzuzeigen, müssen Sie die Toolbox aktivieren. Klicken Sie dazu auf das Symbol Toolsammlung in der Symbolleiste. Daraufhin erhalten Sie ein Fenster mit allen verfügbaren Steuerelementen. Sie können auf Listenfeld klicken, um es im Benutzerformular zu generieren.
Abbildung 8. Einfügen eines Listenfeldes in das Benutzerformular
Wir werden das Listenfeld lstListBox nennen. Um es mit Werten zu belegen, müssen wir den folgenden Code in die Methode Initialize des Objekts UserForm einfügen:
Private Sub UserForm_Initialize()
With Benutzerformular1.lstListBox
.AddItem "John"
.AddItem "Michael"
.AddItem "Jennifer"
.AddItem "Lilly"
.AddItem "Robert"
End With
End Sub
Dieser Code wird jedes Mal ausgelöst, wenn ein Benutzer das Benutzerformular ausführt. Dadurch wird das Listenfeld jedes Mal mit diesen 5 Namen befüllt:
Abbildung 9. Das Listenfeld mit Werten im Benutzerformular
Wenn Sie den ausgewählten Wert aus dem Listenfeld abrufen möchten, müssen Sie die gleiche Logik wie beim Listenfeld in einem Arbeitsblatt verwenden. Diese wurde weiter oben in diesem Artikel erläutert.