VBA Listbox - Valt objekt

Den här artikeln kommer att visa hur du arbetar med det valda objektet i en listbox i Excel VBA.

Listboxar används till stor del i VBA -formulär men kan också användas i ditt Excel -kalkylblad. De visar en lista med alternativ för användarna, varav en eller flera kan användaren välja.

Skapa listbox i ett VBA -formulär

För att skapa en listruta i ett VBA -formulär måste vi först skapa UserForm.

När du har skapat ditt formulär, välj List Box -kontrollen i verktygslådan och dra sedan för att skapa en listruta i formuläret.

Lägga till värden i listrutan

I formulärets initialiseringshändelse skriver du följande kod. Listrutan hämtar värden som lagras i ett antal celler i ditt Excel -kalkylblad.

123456 Private Sub UserForm_Initialize ()Dim rng As RangeFör varje rng In Range ("A1: A50")Me.lstState.AddItem rng.ValueNästa rngAvsluta Sub

När vi kör formuläret visas listrutan som visas på bilden nedan:

Välja värden från listrutan

Som standard kan ett enda värde väljas i en listruta i ett användarformulär. Detta kan dock ändras genom att ändra egenskapen Multi-Select i listrutan.

Klicka på listrutan för att markera den och sedan i egenskapsfönstret, ändra egenskapen för flera val från 0-frmMultiSelectSingle till 1-frmMultiSelectMulti.

Nu när vi kör formuläret kan vi välja mer än ett alternativ i listrutan.

Om vi ​​ändrar alternativet att vara 2-frmMultiSelectExtended, betyder det att vi kan välja ett av värdena och sedan, håll ned SHIFT -tangenten, välj ett annat värde längre ner i listan, och alla objekt mellan de två valda värdena kommer också att väljas.

VBA -programmering | Kodgenerator fungerar för dig!

Arbeta med de utvalda värdena i VBA

Beroende på vilken typ av alternativ vi har använt för Multi-Select-egenskapen i listrutan finns det ett antal sätt att använda värdet eller värdena som valts i listrutan i VBA-kod.

Tilldela en variabel värdet

Vi kan använda Efter_Uppdatering händelse i listrutan för att tilldela det valda värdet till en variabel.

Låt oss först skapa en modulnivåvariabel högst upp i formulärmodulen.

Under orden, Alternativ Explicit, skapa följande strängvariabel.

1 Dim strState som sträng.

När vi har skapat denna variabel kan vi dubbelklicka på rutan Lista för att gå till koden bakom formuläret, eller så kan vi klicka på kodknappen i VBE Editor.

Klickahändelsen i listrutan skapas automatiskt. Välj Efter_Uppdatering Händelse från listan över tillgängliga procedurer.

I händelsen After_Update skriver du följande kod:

123 Privat del lstState_AfterUpdate ()strState = Me.lstStateAvsluta Sub

OBS: Du kan radera Click -händelsen eftersom den inte krävs.

Om vi ​​kör formuläret och klickar på listrutan kommer det valda värdet att lagras i variabeln. För att testa detta kan vi sätta en BREAK -punkt i koden.

Nu när vi kör formuläret, om vi klickar på listrutan, går koden till DEBUG -läge och stannar vid vår brytpunkt. Om vi ​​sedan trycker på F8 på tangentbordet för att gå ett steg längre i koden, fylls variabeln med det valda objektet i listan.

Vi kan se detta värde genom att vila musen på variabeln.

ELLER

Vi kan se värdet i fönstret Omedelbart.

Trött på att söka efter exempel på VBA -kod? Prova AutoMacro!

Använd en kommandoknapp för att returnera värdet till Excel

För det första skapar vi en kommandoknapp på formuläret för att ha en OK -knapp för att returnera värdet eller värdena som valts i listrutan till Excel.

Välj kommandoknappskontrollen och klicka och dra sedan i formuläret för att skapa knappen.

Ändra namnet på knappen i fönstret Egenskaper till cmdOK, och ändra knapptexten och acceleratorn.

Syftet med acceleratorn är att användaren använder tangentbordet för att aktivera knappen, i det här fallet Alt+O skulle aktivera knappen.

För att kommandoknappen ska fungera måste vi lägga till koden bakom den så att koden körs när du klickar på den. Detta kallas för klickhändelsen på knappen.

För att komma till klickhändelsen dubbelklickar du på knappen i formulärets designvy. Klickhändelsen skapas automatiskt eftersom detta är den händelse som oftast används för kommandoknappar.

Skriv följande kod i klickhändelsen på kommandoknappen.

123 Privat under cmdOK_Click ()Område ("E1") = strStateAvsluta Sub

Koden hämtar variabeln som vi deklarerade i händelsen After_Update i ListBox och returnerar värdet till intervallet i Excel.

Alternativt kan vi hämta värdet direkt från listrutan utan att använda en variabel.

123 Privat under cmdOK_Click ()Område ("E1") = me.lstStateAvsluta Sub

När vi kör formuläret returneras det valda värdet till Excel när vi klickar på OK -knappen.

Välja flera värden

Om vi ​​har ställt in multi-select-egenskapen i listrutan till 1 eller 2 som gör att vi kan välja flera värden i listan, så är koden för att välja dessa värden något annorlunda.

De Efter_Uppdatering händelse avfyras inte längre när du väljer värdena i listrutan - vi kan därför inte använda den här händelsen.

Vi kan fortfarande använda kommandoknappens klickhändelse, men vi måste gå igenom de värden som valts i listrutan för att kunna återställa dem till Excel.

I kommandoknappen Klicka på händelse, skriv följande kod.

12345678910 Privat under cmdOK_Click ()Dim x Som heltalOmråde ("E1"). VäljFör x = 0 Till Me.lstState.ListCount - 1If Me.lstState.Selected (x) = True ThenActiveCell = Me.lstState.List (x)ActiveCell.Offset (1, 0) .VäljAvsluta omNästa xAvsluta Sub

Nu när vi kör formuläret kommer endast de valda värdena att returneras till Excel -arket.

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave