VBA Listbox - Udvalgt element

Denne artikel vil vise, hvordan du arbejder med det valgte element i en listeboks i Excel VBA.

Listebokse bruges stort set i VBA -formularer, men kan også bruges i dit Excel -regneark. De viser en liste over muligheder for brugerne, hvoraf en eller flere kan vælges.

Oprettelse af listeboks i en VBA -formular

For at oprette en listeboks i en VBA -formular skal vi først oprette UserForm.

Når du har oprettet din formular, skal du vælge kontrolboksen Listeboks i værktøjskassen og derefter trække for at oprette en listeboks på din formular.

Tilføjelse af værdier til listeboksen

I formularen Initialiser hændelse skal du indtaste følgende kode. Listeboksen henter værdier, der er gemt i en række celler i dit Excel -regneark.

123456 Privat underbrugerForm_Initialize ()Dim rng Som områdeFor hver rng In Range ("A1: A50")Me.lstState.AddItem rng.ValueNæste rngAfslut Sub

Når vi kører formularen, vises listeboksen som vist på billedet herunder:

Valg af værdier fra listeboksen

Som standard kan en enkelt værdi vælges i en listeboks i en brugerform. Dette kan dog ændres ved at ændre egenskaben Multi-Select i listeboksen.

Klik på listefeltet for at vælge det, og skift derefter egenskaben Multi-Select i vinduet Egenskaber fra 0-frmMultiSelectSingle til 1-frmMultiSelectMulti.

Når vi nu kører formularen, kan vi vælge mere end én mulighed i listeboksen.

Hvis vi ændrer muligheden for at være 2-frmMultiSelectExtended, betyder det, at vi kan vælge en af ​​værdierne, og derefter, holder SHIFT -tasten nede, vælg en anden værdi længere nede på listen, og alle elementerne mellem de 2 valgte værdier vil også blive valgt.

VBA -programmering | Kodegenerator virker for dig!

Arbejde med de udvalgte værdier i VBA

Afhængigt af den type option, vi har brugt til Multi-Select-ejendommen i listeboksen, er der en række måder, vi kan bruge den eller de værdier, der er valgt i listeboksen i VBA-kode.

Tildeling af værdien til en variabel

Vi kan bruge Efter_opdatering begivenhed i listeboksen for at tildele den valgte værdi til en variabel.

Lad os for det første oprette en variabel på modulniveau øverst i formularmodulet.

Under ordene, Mulighed eksplicit, opret følgende strengvariabel.

1 Dim strState som streng.

Når vi har oprettet denne variabel, kan vi dobbeltklikke på feltet Liste for at gå til koden bag formularen, eller vi kan klikke på kodeknappen i VBE Editor.

Klikhændelsen i listeboksen oprettes automatisk. Vælg Efter_opdatering Begivenhed danner listen over tilgængelige procedurer.

Indtast følgende kode i hændelsen After_Update:

123 Privat sub lstState_AfterUpdate ()strState = Me.lstStateAfslut Sub

BEMÆRK: Du kan slette Click -begivenheden, da den ikke er påkrævet.

Hvis vi nu kører formularen og klikker på listeboksen, gemmes den valgte værdi i variablen. For at teste dette kan vi sætte et BREAK -punkt i koden.

Når vi nu kører formularen, hvis vi klikker på listeboksen, går koden i DEBUG -tilstand og stopper ved vores afbrydelsespunkt. Hvis vi derefter trykker på F8 på tastaturet for at gå et skridt videre i koden, vil variablen blive udfyldt med det valgte element på listen.

Vi kan se denne værdi ved at hvile musen på variablen.

ELLER

Vi kan se værdien i vinduet Umiddelbart.

Træt af at søge efter eksempler på VBA -kode? Prøv AutoMacro!

Brug en kommandoknap til at returnere værdien til Excel

For det første opretter vi en kommandoknap på formularen for at have en OK -knap for at returnere værdien eller værdierne, der er valgt i listeboksen, til Excel.

Vælg kommandoknappen, og klik derefter på og træk i din formular for at oprette knappen.

I vinduet Egenskaber skal du ændre navnet på knappen til cmdOK, og ændr billedteksten og acceleratoren på knappen.

Formålet med Acceleratoren er, at brugeren i dette tilfælde bruger tastaturet til at aktivere knappen Alt+O ville aktivere knappen.

For at kommandoknappen skal fungere, skal vi tilføje kode bag den, så når der klikkes på knappen, kører koden. Dette kaldes klikhændelsen på knappen.

For at komme til klikbegivenheden skal du dobbeltklikke på knappen i formularens designvisning. Klikhændelsen oprettes automatisk, da dette er den hændelse, der oftest bruges til kommandoknapper.

Indtast følgende kode i klikhændelsen på kommandoknappen.

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

Koden henter den variabel, vi erklærede i hendelsen After_Update i ListBox og returnerer værdien til området i Excel.

Alternativt kan vi hente værdien direkte fra listeboksen uden at bruge en variabel.

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

Når vi kører formularen, returneres den valgte værdi til Excel, når vi klikker på knappen OK.

Valg af flere værdier

Hvis vi har sat egenskaben multi-select i listeboksen til 1 eller 2, som giver os mulighed for at vælge flere værdier på listen, så er koden til at vælge disse værdier en smule anderledes.

Det Efter_opdatering hændelse udløses ikke længere ved valg af værdier i listeboksen - vi kan derfor ikke bruge denne hændelse.

Vi kan stadig bruge kommandoknappens klikhændelse, men vi skal gennemgå de værdier, der er valgt i listeboksen for at returnere dem til Excel.

I kommandoknappen Klik på hændelse, indtast følgende kode.

12345678910 Privat under cmdOK_Click ()Dim x Som heltalOmråde ("E1"). VælgFor x = 0 Til Me.lstState.ListCount - 1Hvis Me.lstState.Selected (x) = True ThenActiveCell = Me.lstState.List (x)ActiveCell.Offset (1, 0) .VælgAfslut HvisNæste xAfslut Sub

Når vi nu kører formularen, returneres kun de valgte værdier til Excel -arket.

Du vil bidrage til udviklingen af ​​hjemmesiden, at dele siden med dine venner

wave wave wave wave wave