I VBA kan du skapa en Listbox där en användare kan välja ett av de listade alternativen. Listbox används ofta i användarformulär, men kan också användas i ett kalkylblad. I den här självstudien lär du dig hur du skapar, fyller i och tar bort en listbox. Du kommer också att se hur du får ett användarval i VBA och använder det i kod.
Om du vill lära dig hur du skapar en ComboBox, klicka här: VBA ComboBox
Om du vill lära dig hur du skapar en kryssruta, klicka här: VBA -kryssruta
Skapa en listbox
För att infoga en listbox i kalkylbladet måste du gå till Fliken Utvecklare, klick Föra in och välj under ActiveX -kontroller Listruta:
Bild 1. Infoga en listbox i kalkylbladet
När du väljer Listbox som du infogade kan du klicka på Egenskaper under Fliken Utvecklare:
Bild 2. Ändra Listbox Properties
Här kan du ställa in olika egenskaper för Listbox. Till att börja med ändrade vi attributet namn till lstListBox. Nu kan vi använda Listbox med detta namn i VBA -kod.
Fyll i en listbox i VBA -kod
Först måste vi fylla i listboxen med värden. I de flesta fall måste en listbox fyllas i när arbetsboken öppnas. På grund av detta måste vi lägga in en kod för att fylla i listboxen i objektet Arbetsbok, procedur Öppen. Denna procedur utförs varje gång en användare öppnar arbetsboken. Här är koden:
123456789 | Med Sheet1.lstListBox.AddItem "John".AddItem "Michael".AddItem "Jennifer".AddItem "Lilly".AddItem "Robert"Sluta med |
Som du kan se i bild 3 fyllde vi vår listbox med 5 namn (John, Michael, Jennifer, Lilly och Robert):
Bild 3. Fyll i listboxen i VBA
Fyll i en listbox från ett cellintervall
Ett annat möjligt sätt att fylla i en Listbox är att låta en användare göra det. En listbox kan länkas till cellintervallet. Därför, varje gång en användare anger ett nytt värde i cellintervallet, uppdateras Listbox med det värdet.
Om du vill aktivera detta måste du gå till Egenskaper i ListBox och ställ in attributet ListFillRange:
Bild 4. Fyll i listboxen från cellintervallet
Vi länkade vår Listbox med intervallet E2: E5, där vi sätter namn vi vill ha (Nathan, Harry, George, Roberta). Som ett resultat fylls Listbox nu med dessa namn.
Få ett valt objekt i en listbox i VBA
Syftet med en Listbox är att få användarnas val. För att hämta ett värde som väljs av en användare måste du använda den här koden:
123 | Dim strSelectedItem As VariantstrSelectedItem = Sheet1.lstListBox.Value |
Användarvalet finns i attributet Värde av Sheet1.lstListbox objekt. Detta värde tilldelas variabeln strSelectedItem:
Bild 5. Hämta ett valt värde från Listbox i VBA
Vi valde Harry i listboxen och körde proceduren. Som du kan se i bild 5, värdet på strSelectedItem är Harry, vilket är det värde vi valde. Dessutom kan du bearbeta denna variabel i koden.
Rensa en listbox
För att rensa en Listbox i VBA måste du använda Klar metod av Sheet1.lstListBox objekt. Det raderar alla objekt från listboxen. Här är koden:
1 | Sheet1.lstListBox.Clear |
När vi kör koden får vi den tomma Listbox:
Bild 6. Rensa listboxen
Använd en listbox i en användarform
Som vi nämnde används Listbox oftast i Userforms. För att förklara hur du kan göra kommer vi först att infoga en användarform. I VBA-editor, högerklicka på modulnamn, klicka på Föra in och välj UserForm:
Bild 7. Infoga en användarform
För att visa kontroller för infogning måste du aktivera Verktygslåda. För att göra detta, klicka påVerktygslåda ikonen i verktygsfältet. Efter det får du fönstren med alla tillgängliga kontroller. Du kan klicka på ListBox för att skapa den i Userform.
Bild 8. Infoga en listbox i användarformen
Vi kommer att namnge ComboBox cmbComboBox. För att fylla den med värden måste vi lägga in följande kod i metoden Initiera av föremålet UserForm:
12345678910111213 | Private Sub UserForm_Initialize ()Med UserForm1.lstListBox.AddItem "John".AddItem "Michael".AddItem "Jennifer".AddItem "Lilly".AddItem "Robert"Sluta medAvsluta Sub |
Denna kod utlöses varje gång en användare kör användarformuläret och fyller i listboxen med dessa fem namn:
Bild 9. Listboxen med värden i Userform
Om du vill få valt värde från ComboBox måste du använda samma logik för Combobox i ett kalkylblad, vilket förklaras tidigare i artikeln.