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.