Tento článek předvede, jak pracovat s vybranou položkou v seznamu v aplikaci Excel VBA.
Krabice se seznamem se z velké části používají ve formulářích VBA, ale lze je použít také v listu aplikace Excel. Ukazují uživatelům seznam možností, z nichž si může uživatel vybrat jednu nebo více.
Vytvoření seznamu ve formuláři VBA
Chcete -li vytvořit seznam ve formuláři VBA, musíme nejprve vytvořit UserForm.
Jakmile vytvoříte formulář, vyberte v panelu nástrojů ovládací prvek Seznam a přetažením vytvořte ve formuláři pole se seznamem.
Přidání hodnot do seznamu
Do události Initialize formuláře zadejte následující kód. Pole se seznamem vyzvedne hodnoty, které jsou uloženy v oblasti buněk v listu aplikace Excel.
123456 | Private Sub UserForm_Initialize ()Dim rng As RangePro každý rozsah v rozsahu („A1: A50“)Me.lstState.AddItem rng.ValueDalší rngEnd Sub |
Když spustíme formulář, zobrazí se pole se seznamem, jak ukazuje následující obrázek:
Výběr hodnot ze seznamu
Ve výchozím nastavení lze v seznamu vybrat v uživatelském formuláři jednu hodnotu. To však lze změnit změnou vlastnosti Multi-Select v seznamu.
Kliknutím na pole seznamu jej vyberte a poté v okně Vlastnosti změňte vlastnost Multi-Select z 0-frmMultiSelectSingle na 1-frmMultiVyberteMulti.
Když nyní spustíme formulář, můžeme v seznamu vybrat více než jednu možnost.
Pokud změníme možnost na 2-frmMultiSelectExtended, to znamená, že můžeme vybrat jednu z hodnot a poté, podržením klávesy SHIFT, vyberte další hodnotu dále v seznamu a také budou vybrány všechny položky mezi 2 vybranými hodnotami.
Programování VBA | Generátor kódu pracuje pro vás!
Práce s vybranými hodnotami ve VBA
V závislosti na typu možnosti, kterou jsme použili pro vlastnost Multi-Select v seznamu, existuje několik způsobů, jak můžeme použít hodnotu nebo hodnoty vybrané v seznamu v kódu VBA.
Přiřazení hodnoty proměnné
Můžeme použít After_Update událost ze seznamu pro přiřazení hodnoty vybrané proměnné.
Za prvé, vytvořme proměnnou na úrovni modulu v horní části modulu formuláře.
Pod slovy, Možnost Explicitní, vytvořte následující řetězcovou proměnnou.
1 | Dim strState jako řetězec. |
Jakmile tuto proměnnou vytvoříme, můžeme poklepáním na pole Seznam přejít na kód za formulářem, nebo můžeme kliknout na tlačítko kódu v editoru VBE.
V seznamu se automaticky vytvoří událost Click. Vybrat After_Update Událost tvoří seznam dostupných procedur.
V události After_Update zadejte následující kód:
123 | Soukromý pod lstState_AfterUpdate ()strState = Me.lstStateEnd Sub |
POZNÁMKA: Událost Click můžete odstranit, protože není vyžadována.
Pokud nyní spustíme formulář a klikneme na pole se seznamem, vybraná hodnota se uloží do proměnné. Chcete -li to otestovat, můžeme do kódu vložit bod BREAK.
Když nyní spustíme formulář, klikneme -li na pole se seznamem, kód přejde do režimu DEBUG a zastaví se v bodě přerušení. Pokud poté na klávesnici stiskneme klávesu F8, abychom se v kódu posunuli o krok dále, proměnná se naplní vybranou položkou v seznamu.
Tuto hodnotu můžeme zobrazit umístěním myši na proměnnou.
NEBO
Hodnotu můžeme zobrazit v Okamžitém okně.
Už vás nebaví hledat příklady kódu VBA? Zkuste AutoMacro!
Pomocí příkazového tlačítka vrátíte hodnotu do Excelu
Nejprve ve formuláři vytvoříme příkazové tlačítko, abychom měli tlačítko OK pro vrácení hodnoty nebo hodnot vybraných v seznamu do Excelu.
Vyberte ovládací prvek Příkazové tlačítko a potom kliknutím a přetažením ve formuláři vytvořte tlačítko.
V okně Vlastnosti změňte název tlačítka na cmdOKa změňte Titulek a Akcelerátor tlačítka.
Účelem akcelerátoru je, aby v tomto případě uživatel použil klávesnici k aktivaci tlačítka Alt+O by aktivovalo tlačítko.
Aby příkazové tlačítko fungovalo, musíme za něj přidat kód, aby se po kliknutí na tlačítko kód spustil. Toto se nazývá událost kliknutí tlačítka.
K události kliknutí se dostanete dvojitým kliknutím na tlačítko v návrhovém zobrazení formuláře. Událost kliknutí bude automaticky vytvořena, protože toto je událost, která se nejčastěji používá pro příkazová tlačítka.
Do události kliknutí příkazového tlačítka zadejte následující kód.
123 | Soukromý sub cmdOK_Click ()Rozsah ("E1") = strStateEnd Sub |
Kód vyzvedne proměnnou, kterou jsme deklarovali v události After_Update ListBoxu, a vrátí hodnotu Range v Excelu.
Alternativně můžeme hodnotu vyzvednout přímo ze seznamu bez použití proměnné.
123 | Soukromý sub cmdOK_Click ()Rozsah ("E1") = me.lstStateEnd Sub |
Když spustíme formulář, vybraná hodnota se vrátí do aplikace Excel, když klikneme na tlačítko OK.
Výběr více hodnot
Pokud jsme nastavili vlastnost vícenásobného výběru v seznamu na 1 nebo 2, což nám umožňuje vybrat více hodnot v seznamu, pak se kód pro výběr těchto hodnot mírně liší.
The After_Update událost se již při výběru hodnot v seznamu nespouští - tuto událost proto nemůžeme použít.
Stále můžeme použít událost kliknutí na příkazové tlačítko, ale musíme vrátit hodnoty vybrané v seznamu, abychom je mohli vrátit do Excelu.
Do příkazového tlačítka Click událost zadejte následující kód.
12345678910 | Soukromý sub cmdOK_Click ()Dim x As IntegerRozsah („E1“). VybertePro x = 0 To Me.lstState.ListCount - 1Pokud Me.lstState.Selected (x) = True ThenActiveCell = Me.lstState.List (x)ActiveCell.Offset (1, 0). VyberteKonec IfDalší xEnd Sub |
Když nyní spustíme formulář, budou do listu aplikace Excel vráceny pouze vybrané hodnoty.