Pro tip: Populér en Excel UserForm-kombinationsboks uden VBA

Sidste måneds artikel, "Pro tip: Tilføj en UserForm for at hjælpe dataindtastning i Excel, " deler det grundlæggende ved at oprette en Excel UserForm ved hjælp af VBA til at udfylde listekontroller. For at opdatere listen kan du tilføje eller slette emnet til VBA-proceduren. Denne måned deler jeg teknikker til udfyldning af kombinations- og listefeltkontroller ved hjælp af data, der er indtastet på arkniveauet.

Inden vi kommer i gang, har jeg to råd til arkivniveauer:

  • Brug et dedikeret ark til lister, selvom der kun er en liste. Chancerne er, at du tilføjer mere, når du får fat på processen, og du finder et dedikeret ark praktisk, effektivt og sikkert. Det dedikerede lister i eksemplet navngives passende nok Lister.
  • Hvis det er muligt, skal du indtaste listeelementerne i en rækkefølge, der giver mening til dataene, og den måde, brugerne bruger dem. For eksempel kan du bruge alfabetisk eller numerisk rækkefølge. Det er ikke altid praktisk at indtaste listeposterne i rækkefølge, men når du kan, gør det. At sætte en liste i rækkefølge efter det faktum komplicerer ting.

Brug et intervalnavn

Den nemmeste måde at udfylde en af ​​Excel's listekontroller er måske at indtaste listen på arkniveauet og give listen et intervalnavn. Derefter kan du henvise til dette interval som kontrolens egenskab Row Source. Det er den nemmeste metode, men den mindst fleksible. For at komme i gang har du brug for en liste, f.eks. Den der er vist i figur A. Du kan arbejde med en hvilken som helst liste, eller du kan downloade eksemplet .xls eller .xlsm-fil.

Figur A

Indtast en liste over elementer i et dedikeret ark.

Når du har indtastet din liste, skal du anvende et navninterval:

  1. Vælg listen, inklusive overskriften (A1: A6).
  2. Klik på fanen Formler.
  3. Klik på Opret fra markering i gruppen Definerede navne.
  4. Excel vil som standard vælge indstillingen Top Row i den resulterende dialog ( figur B ). Klik på OK.
    Figur B

Nu er du klar til at tilføje UserForm:

  1. Tryk på Alt + F11 for at starte Visual Basic Editor (VBE).
  2. Vælg UserForm i menuen Indsæt.
  3. Klik på Combo Box-kontrollen i værktøjskassen, og klik derefter på UserForm for at indsætte den nye kontrol ( figur C ).
    Fig
  4. Hvis egenskabsvinduet er åbent, vil du se, at det viser egenskaberne for den nye kontrol (det valgte objekt). Hvis dette vindue ikke er synligt, skal du trykke på F4 eller vælge Egenskabsvindue i menuen Vis.
  5. Når kombinationsboksen stadig er valgt, skal du finde egenskaben Row Source og indtaste ClassRange ( figur D ). Det er navnet på det interval (liste), du oprettede tidligere (se figur B ).
    Figur D

Det er det! På dette tidspunkt er du klar til at teste den nye UserForm ved at trykke på F5 eller klikke på knappen Kør makro på VBEs standardværktøjslinje. Figur E viser kontrollen åben for at vise sin liste. Det var let og krævede ikke lidt VBA.

Figur E

Excel udfylder kontrollen ved hjælp af de data, der er gemt i det navngivne område ClassRange.

Tidligere nævnte jeg, at selv om denne metode sandsynligvis er den nemmeste, er den mindst fleksibel. Her er grunden til: Hvis du tilføjer et element i bunden af ​​listen, vises det nye element ikke på kontrollisten, medmindre du husker at opdatere rækkevidden til at inkludere den nye celle. Hvis du indsætter en række og tilføjer emnet, opdaterer Excel rækkevidden, så den inkluderer den nye række, men du skal stadig huske at gøre det. Hvis listen derudover er i alfabetisk rækkefølge, skal du huske at sortere den igen. Det er ikke en frygtelig løsning på nogen måde, men at reducere den nødvendige vedligeholdelse er et godt mål, som er et fremragende sted til den næste metode - ved hjælp af et tabelobjekt til at gemme din liste.

Inden vi går videre, ved jeg, at nogle af jer spekulerer på, hvorfor jeg ikke foreslår en dynamisk rækkeviddeformel ("Befolk en brugerformular-kombinationsboks i Excel med en dynamisk liste"). I de fleste situationer er en sådan kompleks løsning ikke nødvendig - og det er min mindst favorit, fordi et dynamisk interval kan være vanskeligt at vedligeholde i en distribueret projektmappe.

Brug et tabelobjekt

Nogle lister vil ikke være statiske. Du ønsker at tilføje og måske endda slette emner. Excel's tabelobjekt udmærker sig ved dette! (Tabelobjektet er nyt for Excel 2007, så det er ikke tilgængeligt i tidligere versioner.) Processen er stort set den samme som et navngivet interval, men i stedet for et interval bruger du en tabel og henviser derefter til tabellen som kontrolens Row Source ejendom. Som før har du brug for en liste, der ligner den, der er vist i figur F.

Figur F

Indtast dine listeposter.

Når din første liste er på plads, er du klar til at konvertere den til et tabelobjekt:

  1. Klik hvor som helst på listen.
  2. Klik på fanen Indsæt.
  3. I gruppen Tabeller skal du klikke på Tabel ( figur G ).
    Figur G
  4. Standardindstillingerne er korrekte, så klik på OK. Hvis din liste ikke har en overskrift, skal du sørge for at fjerne markeringen af ​​denne indstilling. Excel opretter tabelobjektet og anvender standardtabelformaterne.

Excel tildeler et standardnavn til hver tabel. Du skal kende dette navn, så med den valgte tabel skal du klikke på fanen Design-kontekst. I gruppen Egenskaber (til venstre) viser Excel tabelens standardnavn. Du kan bruge standardnavnet eller tildele et brugerdefineret navn som følger:

  1. Klik inde i tabellen Navn-kontrol for at vælge navnet.
  2. Skriv det nye navn ( figur H ).
    Figur H

Det er det!

Vend tilbage til VBE og tilføj en anden kombinationsboks-kontrol til UserForm. Når denne kontrol er valgt, skal du indtaste ClassTable som den nye kontrols egenskab Row Source, som vist i figur I.

Figur I

Indstil kontrolens egenskab Row Source.

Tryk på F5 for at køre UserForm. Figur J viser listen over den anden kontrol.

Figur J

Den nye kontrol viser den samme liste, men kilden er anderledes.

Indtil videre har processen været næsten den samme som den første navngivne række metode, men her er hvor de to metoder deler veje. Luk UserForm og vende tilbage til listerarket. Derefter tilføjes et nyt element nederst på tabellisten. Vælg blot C6 og indtast Reptil. Hvis Excel ikke udvider tabellen til at inkludere den nye vare, skal du slette den. Vælg derefter celle C5 og tryk på Tab for at udvide tabellen til at omfatte C6 og indtast Reptil, som vist i figur K.

Figur K

Føj en ny vare til tabellen.

Vend tilbage til VBE og tryk på F5 for at køre UserForm. Som du kan se i figur L, inkluderer den nye liste Reptil. Du behøvede ikke at opdatere et intervalnavn eller sortere listen. Det fungerer bare.

Figur L

Den nye kontrol opdateres automatisk for at inkludere den nye artikel, Reptile.

Ingen af ​​disse metoder kræver en smule VBA-kode, men Tabel-metoden er mere fleksibel end metoden til områdenavn. Når du opretter dine lister, skal du huske vedligeholdelse og brugervenlighed.

Send mig dit spørgsmål om Office

Jeg besvarer læsernes spørgsmål, når jeg kan, men der er ingen garanti. Når du kontakter mig, skal du være så specifik som muligt. For eksempel "Fejlfinding i min projektmappe og rettelse af hvad der er galt" får sandsynligvis ikke noget svar, men "Kan du fortælle mig, hvorfor denne formel ikke returnerer de forventede resultater?" magt. Jeg får ikke refunderet TechRepublic for min tid eller ekspertise, og jeg beder heller ikke om et gebyr fra læserne. Du kan kontakte mig på

© Copyright 2020 | mobilegn.com