/ / Mehrere Auswahllistenauswahl in Excel VBA

Mehrere Listenfeldauswahl in Excel VBA

Das MultiSelect-Eigenschaft im Excel VBA ermöglicht einem Benutzer, mehrere Elemente in einem Listenfeld auszuwählen. Die Benutzerform, die wir erstellen werden, sieht folgendermaßen aus:

Mehrere Listenfeldauswahl in Excel VBA

Führen Sie die folgenden Schritte aus, um dieses Benutzerformular zu erstellen.

1. Öffnen Sie den Visual Basic-Editor. Wenn der Projekt-Explorer nicht sichtbar ist, klicken Sie auf Ansicht, Projekt-Explorer.

2. Klicken Sie auf Einfügen, Benutzerformular. Wenn die Toolbox nicht automatisch angezeigt wird, klicken Sie auf Ansicht, Toolbox. Ihr Bildschirm sollte wie folgt eingerichtet sein.

Benutzerbildschirm Setup in Excel VBA

3. Fügen Sie die Listenfelder (erstes links, zweites rechts), Befehlsschaltflächen, Kontrollkästchen (erstes links, zweites rechts), Rahmen- und Optionsfelder (erstes oben, zweites unter dem ersten) hinzu , und so weiter). Sobald dies abgeschlossen ist, sollte das Ergebnis mit dem zuvor gezeigten Bild des Benutzerformulars übereinstimmen. Erstellen Sie beispielsweise ein Listenfeldsteuerelement, indem Sie in der Toolbox auf ListBox klicken. Als Nächstes können Sie ein Listenfeld auf dem Benutzerformular ziehen. Wenn Sie am Rahmen "Select Type" ankommen, denken Sie daran, diesen Rahmen zuerst zu zeichnen, bevor Sie die drei Optionsfelder darin platzieren.

4. Sie können die Namen und die Beschriftungen der Steuerelemente ändern. Namen werden im Excel-VBA-Code verwendet. Untertitel sind diejenigen, die auf Ihrem Bildschirm erscheinen. Es empfiehlt sich, die Namen der Steuerelemente zu ändern. Dies ist jedoch nicht erforderlich, da in diesem Beispiel nur wenige Steuerelemente vorhanden sind. Um die Beschriftung des Benutzerformulars, der Befehlsschaltflächen, der Kontrollkästchen, der Rahmen- und Optionsschaltflächen zu ändern, klicken Sie auf Ansicht, Eigenschaftenfenster und dann auf jedes Steuerelement.

5. Um das Benutzerformular anzuzeigen, platzieren Sie eine Befehlsschaltfläche in Ihrem Arbeitsblatt und fügen Sie die folgende Codezeile hinzu:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Wir werden jetzt die Sub UserForm_Initialize erstellen. Wenn Sie die Show-Methode für das Benutzerformular verwenden, wird dieses Sub-Objekt automatisch ausgeführt.

6. Öffnen Sie den Visual Basic-Editor.

7. Klicken Sie im Projektexplorer mit der rechten Maustaste auf UserForm1, und klicken Sie dann auf Code anzeigen.

8. Deklarieren Sie zuerst die Variable i vom Typ Integer. Deklarieren Sie die Variable im Abschnitt Allgemeine Deklarationen (am Anfang des Codes). Auf diese Weise müssen Sie die Variable nur einmal deklarieren und in mehreren Subs verwenden.

Dim i As Integer

9. Wählen Sie Benutzerformular aus der linken Dropdown-Liste. Wählen Sie Initialisieren aus der rechten Dropdown-Liste.

10. Fügen Sie die folgenden Codezeilen hinzu:

Private Sub UserForm_Initialize()

With ListBox1
    .AddItem "Sales"
    .AddItem "Production"
    .AddItem "Logistics"
    .AddItem "Human Resources"
End With

OptionButton3.Value = True

End Sub

Erläuterung: Das erste Listenfeld wird ausgefüllt und das dritte Optionsfeld wird als Standard festgelegt.

Wir haben jetzt den ersten Teil des Benutzerformulars erstellt. Obwohl es bereits ordentlich aussieht, wird nichts passieren, wenn wir auf die Befehlsschaltflächen oder die anderen Steuerelemente klicken.

11. Doppelklicken Sie im Projektexplorer auf UserForm1.

12. Doppelklicken Sie auf die Schaltfläche Hinzufügen.

13. Fügen Sie die folgenden Codezeilen hinzu:

Private Sub CommandButton1_Click()

For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) = True Then ListBox2.AddItem ListBox1.List(i)
Next i

End Sub

Erläuterung: Excel VBA durchläuft das erste Listenfeld (Listenindexnummer von Null (0) für das erste Element in der Liste) und fügt das Element, falls ausgewählt, dem zweiten Listenfeld hinzu.

14. Doppelklicken Sie auf die Schaltfläche Entfernen.

15. Fügen Sie die folgenden Codezeilen hinzu:

Private Sub CommandButton2_Click()

Dim counter As Integer
counter = 0

For i = 0 To ListBox2.ListCount - 1
    If ListBox2.Selected(i - counter) Then
        ListBox2.RemoveItem (i - counter)
        counter = counter + 1
    End If
Next i

CheckBox2.Value = False

End Sub

Erläuterung: Excel VBA durchläuft das zweite Listenfeld und löscht das Element, falls ausgewählt. Die Zählervariable speichert die Anzahl der entfernten Elemente.

16. Doppelklicken Sie auf den ersten Optionsschalter.

17. Fügen Sie die folgenden Codezeilen hinzu:

Private Sub OptionButton1_Click()

ListBox1.MultiSelect = 0
ListBox2.MultiSelect = 0

End Sub

18. Doppelklicken Sie auf den zweiten Optionsschalter.

19. Fügen Sie die folgenden Codezeilen hinzu:

Private Sub OptionButton2_Click()

ListBox1.MultiSelect = 1
ListBox2.MultiSelect = 1

End Sub

20. Doppelklicken Sie auf die dritte Optionsschaltfläche.

21. Fügen Sie die folgenden Codezeilen hinzu:

Private Sub OptionButton3_Click()

ListBox1.MultiSelect = 2
ListBox2.MultiSelect = 2

End Sub

Erläuterung: Die Einstellung "Typ auswählen" kann durch Klicken auf die Optionsfelder ausgewählt werden. Das Bild des Benutzerformulars zeigt eine Beschreibung der einzelnen Einstellungen. Anstatt diese Einstellung zur Laufzeit zu konfigurieren, können Sie diese Einstellung auch zur Entwurfszeit konfigurieren. Um dies zu erreichen, klicken Sie mit der rechten Maustaste auf ein Listenfeld und dann auf Eigenschaften. Legen Sie die Eigenschaft MultiSelect auf 0 - fmMultiSelectSingle, 1 - fmMultiSelectMulti oder 2 - fmMultiSelectExtented fest.

22. Doppelklicken Sie auf das erste Kontrollkästchen.

23. Fügen Sie die folgenden Codezeilen hinzu:

Private Sub CheckBox1_Click()

If CheckBox1.Value = True Then
    For i = 0 To ListBox1.ListCount - 1
        ListBox1.Selected(i) = True
    Next i
End If

If CheckBox1.Value = False Then
    For i = 0 To ListBox1.ListCount - 1
        ListBox1.Selected(i) = False
    Next i
End If

End Sub

Erklärung: Durch Aktivieren des ersten Kontrollkästchens können alle Elemente des ersten Listenfeldes ausgewählt / abgewählt werden.

24. Doppelklicken Sie auf das zweite Kontrollkästchen, um die gleichen Codezeilen hinzuzufügen. Ersetzen Sie CheckBox1 nur durch CheckBox2 und ListBox1 durch ListBox2.

Lesen Sie auch: