/ / Meerdere keuzelijstvak selecties in Excel VBA

Meerdere keuzelijst selecties in Excel VBA

De MultiSelect-eigenschap in Excel VBA staat een gebruiker toe om meerdere items in een keuzelijst te selecteren. Het Userform dat we gaan maken ziet er als volgt uit:

Meerdere keuzelijst selecties in Excel VBA

Om dit gebruikersformulier aan te maken, voert u de volgende stappen uit.

1. Open de Visual Basic-editor. Als de Projectverkenner niet zichtbaar is, klikt u op Beeld, Projectverkenner.

2. Klik op Invoegen, Gebruikersformulier. Als de Toolbox niet automatisch verschijnt, klikt u op Beeld, Werkset. Uw scherm moet worden ingesteld zoals hieronder.

Gebruikersformulier Scherminstellingen in Excel VBA

3. Voeg de keuzelijsten toe (eerst aan de linkerkant, de tweede aan de rechterkant), opdrachtknoppen, selectievakjes (eerst aan de linkerkant, de tweede aan de rechterkant), kader- en optietoetsen (eerst bovenaan, de tweede onder de eerste , enzovoorts). Zodra dit is voltooid, moet het resultaat consistent zijn met de afbeelding van het eerder weergegeven gebruikersformulier. Maak bijvoorbeeld een keuzelijstbesturingselement door in de werkset op ListBox te klikken. Vervolgens kunt u een keuzelijst op het gebruikersformulier slepen. Wanneer u bij het frame "Select Type" arriveert, moet u dit kader eerst tekenen voordat u de drie optieknoppen erin plaatst.

4. U kunt de namen en bijschriften van de bedieningselementen wijzigen. Namen worden gebruikt in de Excel VBA-code. Onderschriften zijn diegene die op je scherm verschijnen. Het is een goede gewoonte om de namen van de besturingselementen te wijzigen, maar dit is hier niet nodig, omdat we in dit voorbeeld slechts enkele besturingselementen gebruiken. Als u het bijschrift van het gebruikersformulier, de opdrachtknoppen, selectievakjes, kader en keuzerondjes wilt wijzigen, klikt u op Beeld, Venster Eigenschappen en klikt u op elk besturingselement.

5. Om het gebruikersformulier weer te geven, plaatst u een opdrachtknop op uw werkblad en voegt u de volgende coderegel toe:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

We gaan nu de Sub UserForm_Initialize maken. Wanneer u de methode Show voor het Userform gebruikt, wordt deze sub automatisch uitgevoerd.

6. Open de Visual Basic-editor.

7. Klik in de projectverkenner met de rechtermuisknop op UserForm1 en klik vervolgens op Code weergeven.

8. Verklaar eerst de variabele i van het type Integer. Declareer de variabele in de sectie Algemene verklaringen (bovenaan de code). Op deze manier hoeft u de variabele maar één keer te declareren en kunt u deze in meerdere subs gebruiken.

Dim i As Integer

9. Kies Userform in de linker vervolgkeuzelijst. Kies Initialiseren in de vervolgkeuzelijst.

10. Voeg de volgende coderegels toe:

Private Sub UserForm_Initialize()

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

OptionButton3.Value = True

End Sub

Uitleg: de eerste keuzelijst wordt gevuld en de derde optieknop wordt standaard ingesteld.

We hebben nu het eerste deel van het gebruikersformulier gemaakt. Hoewel het er al goed uitziet, zal er nog niets gebeuren als we op de opdrachtknoppen of de andere knoppen klikken.

11. Dubbelklik in de Projectverkenner op UserForm1.

12. Dubbelklik op de knop Toevoegen.

13. Voeg de volgende coderegels toe:

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

Verklaring: Excel VBA doorloopt de eerste keuzelijst (lijstindexnummer nul (0) voor het eerste item in de lijst) en voegt het item, indien geselecteerd, toe aan de tweede keuzelijst.

14. Dubbelklik op de knop Verwijderen.

15. Voeg de volgende coderegels toe:

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

Verklaring: Excel VBA doorloopt de tweede keuzelijst en verwijdert het item, indien geselecteerd. De tellervariabele bevat het aantal verwijderde items.

16. Dubbelklik op de eerste optieknop.

17. Voeg de volgende coderegels toe:

Private Sub OptionButton1_Click()

ListBox1.MultiSelect = 0
ListBox2.MultiSelect = 0

End Sub

18. Dubbelklik op de tweede optieknop.

19. Voeg de volgende coderegels toe:

Private Sub OptionButton2_Click()

ListBox1.MultiSelect = 1
ListBox2.MultiSelect = 1

End Sub

20. Dubbelklik op de derde keuzerondje.

21. Voeg de volgende coderegels toe:

Private Sub OptionButton3_Click()

ListBox1.MultiSelect = 2
ListBox2.MultiSelect = 2

End Sub

Uitleg: de instelling "Select Type" kan worden gekozen door op de optieknoppen te klikken. De afbeelding van het eerder getoonde gebruikersformulier geeft een beschrijving van elke instelling. In plaats van deze instelling tijdens runtime te configureren, kunt u deze instelling ook tijdens de ontwerpfase configureren. Klik hiervoor met de rechtermuisknop op een keuzelijstbesturingselement en klik vervolgens op Eigenschappen. Stel de eigenschap MultiSelect in op 0 - fmMultiSelectSingle, 1 - fmMultiSelectMulti of 2 - fmMultiSelectExtented.

22. Dubbelklik op het eerste selectievakje.

23. Voeg de volgende coderegels toe:

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

Uitleg: door het eerste selectievakje aan te vinken, kunnen alle items van de eerste keuzelijst worden geselecteerd / gedeselecteerd.

24. Dubbelklik op het tweede selectievakje om dezelfde coderegels toe te voegen. Vervang CheckBox1 alleen door CheckBox2 en ListBox1 met ListBox2.

Lees ook: