Rückkehr in VBA-Code-Beispiele

VBA – Listenfeld

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:

 

vba listenfeld einfuegen

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:

 

vba listenfeld eigenschaften

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:

 

vba listenfeld befuellen

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:

listenfeld aus zellenbereich befuellen

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:

listenfeld ausgewaehlten wert ermitteln

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:

vba listenfeld leeren

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:

vba benutzerformular einfuegen

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.

listenfeld in benutzerformular einfuegen

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:

vba listenfeld in benutzerformular

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.