/ / Flere listeboksvalg i Excel VBA

Flere listeboksvalg i Excel VBA

Det MultiSelect ejendom i Excel VBA giver en bruger mulighed for at vælge flere elementer i en listefelt. Brugerformularen, vi skal oprette, ser ud som følger:

Flere listeboksvalg i Excel VBA

For at oprette denne brugerformular, udfør følgende trin.

1. Åbn Visual Basic Editor. Hvis Project Explorer ikke er synlig, skal du klikke på Vis, Project Explorer.

2. Klik på Indsæt, Brugerformular. Hvis værktøjskassen ikke vises automatisk, skal du klikke på Vis, Værktøjskasse. Din skærm skal opsættes som nedenfor.

Brugerform Screen Setup i Excel VBA

3. Tilføj listekasserne (først til venstre, andet til højre), kommandoknapper, afkrydsningsfelter (først til venstre, andet til højre), ramme og valgknapper (først øverst, det andet under den første , og så videre). Når dette er gennemført, skal resultatet være i overensstemmelse med billedet af den tidligere viste brugerformular. For eksempel opretter du en listeboks kontrol ved at klikke på ListBox fra værktøjskassen. Derefter kan du trække en listefelt på brugerformularen. Når du kommer til "Select Type" -rammen, skal du huske at tegne denne ramme først, inden du placerer de tre valgknapper i den.

4. Du kan ændre navnene og teksten på kontrollerne. Navne bruges i Excel VBA-koden. Undertekster er dem, der vises på din skærm. Det er god praksis at ændre navnene på kontrollerne, men det er ikke nødvendigt her, fordi vi kun har få kontroller i dette eksempel. For at ændre billedteksten i Brugerform, kommandoknapper, markere afkrydsningsfelter, ramme og valgknapper, klik på Vis, Egenskaber Vindue og klik på hver kontrol.

5. For at vise brugerformularen skal du placere en kommandoknap på dit regneark og tilføje følgende kode linje:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Vi skal nu oprette Sub UserForm_Initialize. Når du bruger visningsmetoden til brugerformularen, udføres denne under automatisk.

6. Åbn Visual Basic Editor.

7. I Project Explorer skal du højreklikke på UserForm1 og derefter klikke på View Code.

8. Først erklæres variablen i af typen Integer. Erklær variablen i afsnittet generelle deklarationer (øverst i koden). På denne måde skal du kun opklare variablen én gang, og du kan bruge dem i flere subs.

Dim i As Integer

9. Vælg Brugerform fra den venstre rullemenu. Vælg Initialize fra den højre rulleliste.

10. Tilføj følgende kode linjer:

Private Sub UserForm_Initialize()

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

OptionButton3.Value = True

End Sub

Forklaring: Den første listefelt vil blive udfyldt, og den tredje valgknapp er angivet som standard.

Vi har nu oprettet den første del af brugerformularen. Selv om det ser pænt ud, sker der intet endnu, når vi klikker på kommandoknapperne eller de andre knapper.

11. Dobbeltklik på UserForm1 i Project Explorer.

12. Dobbeltklik på Tilføj-knappen.

13. Tilføj følgende kode linjer:

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

Forklaring: Excel VBA loops gennem den første listefelt (listindeksnummer på nul (0) for det første element i listen) og, hvis det er valgt, tilføjer elementet til det andet listefelt.

14. Dobbeltklik på knappen Fjern.

15. Tilføj følgende kode linjer:

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

Forklaring: Excel VBA løkker gennem det andet listefelt og fjerner objektet, hvis det er valgt. Tællervariablen holder styr på antallet af fjernede elementer.

16. Dobbeltklik på den første valgknapp.

17. Tilføj følgende kodelinjer:

Private Sub OptionButton1_Click()

ListBox1.MultiSelect = 0
ListBox2.MultiSelect = 0

End Sub

18. Dobbeltklik på den anden valgknapp.

19. Tilføj følgende kode linjer:

Private Sub OptionButton2_Click()

ListBox1.MultiSelect = 1
ListBox2.MultiSelect = 1

End Sub

20. Dobbeltklik på den tredje valgknapp.

21. Tilføj følgende kode linjer:

Private Sub OptionButton3_Click()

ListBox1.MultiSelect = 2
ListBox2.MultiSelect = 2

End Sub

Forklaring: Indstillingen "Select Type" kan vælges ved at klikke på valgknapperne. Billedet af den tidligere viste brugerformular giver en beskrivelse af hver indstilling. I stedet for at konfigurere denne indstilling ved kørsel, kan du også konfigurere denne indstilling ved designtid. For at opnå dette skal du højreklikke på en listeboks-kontrol og derefter klikke på Egenskaber. Indstil MultiSelect-ejendommen til 0 - fmMultiSelectSingle, 1 - fmMultiSelectMulti eller 2 - fmMultiSelectExtented.

22. Dobbeltklik på den første afkrydsningsfelt.

23. Tilføj følgende kodelinjer:

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

Forklaring: Ved at markere det første afkrydsningsfelt kan alle elementer i den første listefelt vælges / fravælges.

24. Dobbeltklik på det andet afkrydsningsfelt for at tilføje de samme kode linjer. Udskift kun CheckBox1 med CheckBox2 og ListBox1 med ListBox2.

Læs også: