VBA-Listenfeld – Ausgewähltes Element

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Zakarya El Oirzadi

Last updated on Dezember 22, 2022

In diesem Artikel zeigen wir Ihnen, wie Sie in Excel-VBA mit dem in einem Listenfeld ausgewählten Element arbeiten können.

Listenfelder zeigen dem Benutzer eine Liste von Optionen an, aus denen er eines oder mehrere Elemente auswählen kann. Sie werden hauptsächlich in VBA-Formularen verwendet, können aber auch in Ihrem Excel-Arbeitsblatt eingesetzt werden.

Ein Listenfeld in einem VBA-Formular erstellen

Um ein Listenfeld in einem VBA-Formular zu erstellen, müssen wir zunächst die UserForm anlegen.

Sobald Sie Ihr Formular erstellt haben, wählen Sie das Steuerelement Listenfeld in der Toolsammlung aus und ziehen Sie es in ihr Formular, um ein Listenfeld dort zu erstellen.

vba listenfeld erstellen

Werte zum Listenfeld hinzufügen

Geben Sie im Initialize-Ereignis des Formulars den folgenden Code ein. Das Listenfeld nimmt dann Werte auf, die in einem Zellenbereich in Ihrem Excel-Arbeitsblatt gespeichert sind.

Private Sub UserForm_Initialize()
  Dim bereich As Range
  For Each bereich In Range("A1:A50")
    Me.lstStaat.AddItem bereich.Value
  Next bereich
End Sub

Beim Ausführen des Formulars wird das Listenfeld wie in der nachstehenden Abbildung gezeigt erscheinen:

vba listenfeld auffuellen

Werte aus dem Listenfeld auswählen

Standardmäßig kann in einem Listenfeld eines Benutzerformulars ein einzelner Wert ausgewählt werden. Dies kann jedoch geändert werden, indem die Listenfeld-Eigenschaft MultiSelect geändert wird.

Klicken Sie auf das Listenfeld, um es auszuwählen, und ändern Sie dann im Eigenschaftsfenster die Eigenschaft MultiSelect von 0-frmMultiSelectSingle in 1-frmMultiSelectMulti.

vba listenfeld multiselect eigenschaft

Beim Ausführen des Formulars können wir nun mehr als eine Option im Listenfeld auswählen.

vba listenfeld multiselect aktiviert

Wenn wir die Option in 2-frmMultiSelectExtended ändern, können wir einen der Werte auswählen und dann bei gedrückter UMSCHALTTASTE einen anderen Wert weiter unten in der Liste auswählen und alle Elemente zwischen den beiden ausgewählten Werten werden ebenfalls ausgewählt. vba listenfeld multiselect umschalttaste

Mit den ausgewählten Werten in VBA arbeiten

Abhängig von der Art der Option, die wir für die Eigenschaft MultiSelect im Listenfeld verwendet haben, gibt es eine Reihe von Möglichkeiten, den oder die im Listenfeld ausgewählten Werte in VBA-Code zu verwenden.

Einen Wert einer Variablen zuweisen

Wir können das Ereignis After_Update des Listenfelds verwenden, um den ausgewählten Wert einer Variablen zuzuweisen.

Zunächst erstellen wir eine Variable auf Modulebene am Anfang des Formularmoduls.

Unter den Worten Option Explicit erstellen Sie die folgende String-Variable.

Dim strStaat as String.

Sobald wir diese Variable erstellt haben, können wir auf das Listenfeld doppelklicken, um den Code hinter dem Formular aufzurufen, oder wir können auf die Code-Schaltfläche im VBE-Editor klicken.

Das Click-Ereignis des Listenfeldes wird automatisch erstellt. Wählen Sie das Ereignis After_Update aus der Liste der verfügbaren Prozeduren.

vba listenfeld modulvariable

Geben Sie im Ereignis After_Update den folgenden Code ein:

Private Sub lstStaat_AfterUpdate()
  strStaat = Me.lstStaat
End Sub

HINWEIS: Sie können das Click-Ereignis löschen, da es nicht erforderlich ist.

Wenn wir nun das Formular ausführen und auf das Listenfeld klicken, wird der ausgewählte Wert in der Variablen gespeichert. Um dies zu testen, können wir einen Haltepunkt in den Code setzen.

vba listenfeld anhaltpunkt

Wenn wir nun das Formular ausführen und auf das Listenfeld klicken, wechselt der Code in den DEBUG-Modus und hält an unserem Haltepunkt an. Wenn wir dann F8 auf der Tastatur drücken, um einen Schritt weiter im Code zu gehen, wird die Variable mit dem ausgewählten Element in der Liste belegt.

Wir können diesen Wert anzeigen, indem wir die Maus auf die Variable setzen.

vba listenfeld variablenwert anzeigen

ODER Wir können den Wert im Direktfenster anzeigen.

vba listenfeld variablenwert direktfenster

Eine Befehlsschaltfläche verwenden, um den Wert an Excel zurückzugeben

Zunächst erstellen wir eine Befehlsschaltfläche auf dem Formular, um eine OK-Schaltfläche zu haben, mit der wir den Wert oder die Werte, die im Listenfeld ausgewählt wurden, an Excel zurückgeben können.

Wählen Sie das Steuerelement Befehlsschaltfläche aus und klicken und ziehen Sie es dann in Ihr Formular, um die Schaltfläche zu erstellen.

vba befehlsschaltfläche hinzufuegen

Ändern Sie im Eigenschaftsfenster den Namen der Schaltfläche in cmdOK und ändern Sie die Schaltflächeneigenschaften Caption und Accelerator.

vba befehlsschaltfläche bearbeiten

Der Zweck von Accelerator besteht darin, dass der Benutzer die Schaltfläche mit der Tastatur aktivieren kann. In diesem Fall würde Alt+O die Schaltfläche aktivieren.

vba bearbeitete befehlsschaltfläche

Damit die Befehlsschaltfläche funktioniert, müssen wir dahinter Code einfügen, damit er ausgeführt wird, wenn die Schaltfläche angeklickt wird. Dies wird als Click-Ereignis der Schaltfläche bezeichnet.

Um zum Click-Ereignis zu gelangen, doppelklicken Sie in der Entwurfsansicht des Formulars auf die Schaltfläche. Das Click-Ereignis wird automatisch erstellt, da dies das Ereignis ist, das am häufigsten für Befehlsschaltflächen verwendet wird.

Geben Sie den folgenden Code in das Click-Ereignis der Befehlsschaltfläche ein.

Private Sub cmdOK_Click()
  Range("E1") = strStaat
End Sub

Der Code greift auf die Variable zu, die wir im Listenfeldereignis After_Update deklariert haben, und gibt den Wert an den Bereich in Excel zurück.

Alternativ können Sie den Wert auch direkt aus dem Listenfeld abrufen, ohne eine Variable zu verwenden.

Private Sub cmdOK_Click()
  Range("E1") = me.lstStaat
End Sub

Wenn wir das Formular ausführen, wird der ausgewählte Wert an Excel zurückgegeben, wenn wir auf die Schaltfläche OK klicken.

vba listenfeldwert in arbeitsblatt

Mehrere Werte auswählen

Wenn wir die MultiSelect-Eigenschaft des Listenfelds auf 1 oder 2 gesetzt haben, wodurch wir mehrere Werte in der Liste auswählen können, ist der Code zur Auswahl dieser Werte etwas anders.

Das Ereignis After_Update wird bei der Auswahl der Werte im Listenfeld nicht mehr ausgelöst. Wir können dieses Ereignis also nicht verwenden.

Wir können immer noch das Click-Ereignis der Befehlsschaltfläche verwenden, aber wir müssen die im Listenfeld ausgewählten Werte in einer Schleife durchlaufen, um sie an Excel zurückzugeben.

Geben Sie im Click-Ereignis der Befehlsschaltfläche den folgenden Code ein.

Private Sub cmdOK_Click()
  Dim x As Integer
  Range("E1").Select
  For x = 0 To Me.lstStaat.ListCount - 1
     If Me.lstStaat.Selected(x) = True Then
        ActiveCell = Me.lstStaat.List(x)
        ActiveCell.Offset(1, 0).Select
     End If
  Next x
End Sub

Jetzt werden beim Ausführen des Formulars nur die ausgewählten Werte an das Excel-Blatt zurückgegeben.

vba listenfeldwerte in arbeitsblatt

vba-free-addin

Add-In für VBA-Code-Beispiele

Auf alle Code-Beispiele aus unserer Website einfach zugreifen.

Navigieren Sie einfach zum Menü, klicken Sie darauf und der Code wird direkt in Ihr Modul eingefügt. .xlam add-in.

(Keine Installation erforderlich!)

Kostenloser Download

Return to VBA Code Examples