VBA-Listenfeld – Ausgewähltes Element
In this Article
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.
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:
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.
Beim Ausführen des Formulars können wir nun mehr als eine Option im Listenfeld auswählen.
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.
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.
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.
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.
ODER Wir können den Wert im Direktfenster anzeigen.
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.
Ändern Sie im Eigenschaftsfenster den Namen der Schaltfläche in cmdOK und ändern Sie die Schaltflächeneigenschaften Caption und Accelerator.
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.
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.
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.