VBA Listbox - Valgt element

Denne artikkelen vil demonstrere hvordan du arbeider med det valgte elementet i en listeboks i Excel VBA.

Listebokser brukes stort sett i VBA -skjemaer, men kan også brukes i Excel -regnearket. De viser en liste over alternativer for brukerne, hvorav ett eller flere som brukeren kan velge.

Opprette listeboks i et VBA -skjema

For å lage en listeboks i et VBA -skjema, må vi først opprette UserForm.

Når du har opprettet skjemaet, velger du listebokskontrollen i verktøykassen og drar for å lage en listeboks på skjemaet.

Legge til verdier i listeboksen

I Initialize -hendelsen i skjemaet, skriver du inn følgende kode. Listeboksen henter verdier som er lagret i en rekke celler i Excel -regnearket.

123456 Private Sub UserForm_Initialize ()Dim rng As RangeFor hver rng In Range ("A1: A50")Me.lstState.AddItem rng.ValueNeste rngSlutt Sub

Når vi kjører skjemaet, vises listeboksen som vist på bildet nedenfor:

Velge verdier fra listeboksen

Som standard kan en enkelt verdi velges i en listeboks i et brukerskjema. Dette kan imidlertid endres ved å endre egenskapen Multi-Select i listeboksen.

Klikk på listeboksen for å velge den, og deretter i Egenskaper-vinduet, endre Multi-Select-egenskapen fra 0-frmMultiSelectSingle til 1-frmMultiSelectMulti.

Når vi kjører skjemaet, kan vi velge mer enn ett alternativ i listeboksen.

Hvis vi endrer alternativet til å være 2-frmMultiSelectExtended, betyr det at vi kan velge en av verdiene, og deretter, holder inne SHIFT -tasten, velg en annen verdi lenger ned på listen, og alle elementene mellom de to verdiene som velges vil også bli valgt.

VBA -programmering | Kodegenerator fungerer for deg!

Arbeider med de utvalgte verdiene i VBA

Avhengig av hvilken type alternativ vi har brukt for Multi-Select-egenskapen i listeboksen, er det en rekke måter vi kan bruke verdien eller verdiene som er valgt i listeboksen i VBA-kode.

Tilordne verdien til en variabel

Vi kan bruke Etter_oppdatering hendelse i listeboksen for å tilordne verdien som er valgt til en variabel.

For det første, la oss lage en variabel på modulnivå øverst i skjemamodulen.

Under ordene, Alternativ Eksplisitt, opprett følgende strengvariabel.

1 Dim strState som streng.

Når vi har opprettet denne variabelen, kan vi dobbeltklikke på Liste-boksen for å gå til koden bak skjemaet, eller vi kan klikke på kode-knappen i VBE Editor.

Klikkhendelsen i listeboksen opprettes automatisk. Velg Etter_oppdatering Arrangement danner listen over tilgjengelige prosedyrer.

I hendelsen After_Update skriver du inn følgende kode:

123 Private Sub lstState_AfterUpdate ()strState = Me.lstStateSlutt Sub

MERK: Du kan slette Click -hendelsen ettersom den ikke er nødvendig.

Hvis vi kjører skjemaet og klikker på listeboksen, vil den valgte verdien lagres i variabelen. For å teste dette kan vi sette et BREAK -punkt i koden.

Når vi kjører skjemaet, hvis vi klikker på listeboksen, går koden inn i DEBUG -modus og stopper ved brytepunktet. Hvis vi deretter trykker på F8 på tastaturet for å gå et skritt videre i koden, vil variabelen fylles ut med det valgte elementet i listen.

Vi kan se denne verdien ved å hvile musen på variabelen.

ELLER

Vi kan se verdien i vinduet Umiddelbart.

Lei av å søke etter eksempler på VBA -kode? Prøv AutoMacro!

Bruk en kommandoknapp for å returnere verdien til Excel

For det første oppretter vi en kommandoknapp på skjemaet for å ha en OK -knapp for å returnere verdien eller verdiene som er valgt i listeboksen til Excel.

Velg kommandoknappkontrollen, og klikk deretter og dra i skjemaet for å opprette knappen.

Endre navnet på knappen i vinduet Egenskaper til cmdOK, og endre bildeteksten og akseleratoren på knappen.

Formålet med akseleratoren er at brukeren skal bruke tastaturet for å aktivere knappen, i dette tilfellet Alt+O. ville aktivere knappen.

For at kommandoknappen skal fungere, må vi legge til kode bak den, slik at når knappen klikkes, kjøres koden. Dette kalles klikkhendelsen på knappen.

For å komme til klikkhendelsen, dobbeltklikker du på knappen i skjermens designvisning. Klikkhendelsen opprettes automatisk ettersom dette er hendelsen som oftest brukes for kommandoknapper.

Skriv inn følgende kode i klikkhendelsen på kommandoknappen.

123 Privat sub cmdOK_Click ()Område ("E1") = strStateSlutt Sub

Koden vil hente variabelen vi erklærte i hendelsen After_Update i ListBox og returnere verdien til området i Excel.

Alternativt kan vi hente verdien direkte fra listeboksen uten å bruke en variabel.

123 Privat sub cmdOK_Click ()Område ("E1") = me.lstStateSlutt Sub

Når vi kjører skjemaet, blir den valgte verdien returnert til Excel når vi klikker OK -knappen.

Velge flere verdier

Hvis vi har satt flervalgsegenskapen i listeboksen til 1 eller 2 som lar oss velge flere verdier i listen, så er koden for å velge disse verdiene litt annerledes.

De Etter_oppdatering hendelse utløses ikke lenger når du velger verdiene i listeboksen - vi kan derfor ikke bruke denne hendelsen.

Vi kan fortsatt bruke kommandoknappens klikkhendelse, men vi må gå gjennom verdiene som er valgt i listeboksen for å returnere dem til Excel.

I kommandoknappen Klikk hendelse, skriv inn følgende kode.

12345678910 Privat sub cmdOK_Click ()Dim x Som heltallOmråde ("E1"). VelgFor x = 0 til Me.lstState.ListCount - 1Hvis Me.lstState.Selected (x) = True ThenActiveCell = Me.lstState.List (x)ActiveCell.Offset (1, 0) .VelgSlutt omNeste xSlutt Sub

Når vi kjører skjemaet, blir bare verdiene som er valgt tilbake til Excel -arket.

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave