Val av flera listrutor i Excel VBA
De MultiSelect egenskap i Excel VBA tillåter en användare att välja flera objekt i en listruta. Användarformen vi ska skapa ser ut som följer:
För att skapa detta användarformulär, utför följande steg.
1. Öppna Visual Basic Editor. Om Project Explorer inte är synligt klickar du på Visa, Project Explorer.
2. Klicka på Insert, Userform. Om Verktygslådan inte visas automatiskt klickar du på Visa, Verktygslåda. Din skärm bör ställas in enligt nedan.
3. Lägg till listrutorna (först till vänster, andra till höger), kommandoknappar, kryssrutor (först till vänster, andra till höger), ram och alternativknappar (först överst, den andra under den första , och så vidare). När detta har slutförts ska resultatet överensstämma med bilden av användarformen som visats tidigare. Skapa till exempel en listrutekontroll genom att klicka på ListBox från Verktygslådan. Därefter kan du dra en listruta på användarformuläret. När du kommer fram till "Select Type" -ramen, kom ihåg att dra denna ram först innan du placerar de tre alternativknapparna i den.
4. Du kan ändra namn och bildtexter på kontrollerna. Namnen används i Excel VBA-koden. Bildtext är de som visas på din skärm. Det är bra att ändra namnen på kontrollerna, men det är inte nödvändigt här eftersom vi bara har några kontroller i det här exemplet. För att ändra bildtexten i användarformat, kommandoknappar, kryssrutor, ram och alternativknappar, klicka på Visa, Egenskaper fönstret och klicka på varje kontroll.
5. För att visa användarformen, placera en kommandoknapp på ditt arbetsblad och lägg till följande kodrad:
UserForm1.Show
End Sub
Vi ska nu skapa Sub UserForm_Initialize. När du använder Visa-metoden för användarformuläret utförs denna del automatiskt.
6. Öppna Visual Basic Editor.
7. I Project Explorer högerklickar du på UserForm1 och klickar sedan på Visa kod.
8. Förklara variabeln i av typen Integer. Förklara variabeln i avsnittet Allmänna förklaringar (längst upp i koden). På så sätt behöver du bara deklarera variabeln en gång och du kan använda dem i flera subs.
9. Välj Användarformulär i den nedrullningsbara listrutan. Välj Initialize från den högra rullgardinsmenyn.
10. Lägg till följande kodlinjer:
With ListBox1
.AddItem "Sales"
.AddItem "Production"
.AddItem "Logistics"
.AddItem "Human Resources"
End With
OptionButton3.Value = True
End Sub
Förklaring: Den första listrutan fylls och den tredje alternativknappen är inställd som standard.
Vi har nu skapat den första delen av Userform. Även om det ser snyggt ut, kommer ingenting att hända ännu när vi klickar på kommandoknappar eller de andra kontrollerna.
11. Dubbelklicka på UserForm1 i Project Explorer.
12. Dubbelklicka på knappen Lägg till.
13. Lägg till följande kodlinjer:
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then ListBox2.AddItem ListBox1.List(i)
Next i
End Sub
Förklaring: Excel VBA-loopar genom den första listrutan (listindexnummer noll (0) för det första objektet i listan) och, om det är valt, lägger till objektet i den andra listrutan.
14. Dubbelklicka på knappen Ta bort.
15. Lägg till följande kodlinjer:
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
Förklaring: Lösningar i Excel VBA genom den andra listrutan och, om den väljs, tar bort objektet. Räknevariabeln spårar antalet borttagna objekt.
16. Dubbelklicka på den första alternativknappen.
17. Lägg till följande kodlinjer:
ListBox1.MultiSelect = 0
ListBox2.MultiSelect = 0
End Sub
18. Dubbelklicka på den andra alternativknappen.
19. Lägg till följande kodlinjer:
ListBox1.MultiSelect = 1
ListBox2.MultiSelect = 1
End Sub
20. Dubbelklicka på den tredje alternativknappen.
21. Lägg till följande kodlinjer:
ListBox1.MultiSelect = 2
ListBox2.MultiSelect = 2
End Sub
Förklaring: Inställningen "Välj typ" kan väljas genom att klicka på alternativknapparna. Bilden av användarformen som visas tidigare ger en beskrivning av varje inställning. I stället för att konfigurera denna inställning vid körning kan du också konfigurera denna inställning vid designtiden. För att uppnå detta, högerklicka på en listrutekontroll och klicka sedan på Egenskaper. Ange MultiSelect-egenskapen till 0 - fmMultiSelectSingle, 1 - fmMultiSelectMulti eller 2 - fmMultiSelectExtented.
22. Dubbelklicka på den första kryssrutan.
23. Lägg till följande kodlinjer:
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
Förklaring: Genom att markera den första kryssrutan kan alla objekt i den första listrutan väljas / avmarkeras.
24. Dubbelklicka på den andra kryssrutan för att lägga till samma kodlinjer. Byt endast CheckBox1 med CheckBox2 och ListBox1 med ListBox2.