Vytváření uživatelských formulářů VBA

Formuláře uživatele VBA

Userform je velmi důležitou součástí programování ve VBA. Umožňuje vám vytvořit profesionálně vypadající uživatelské rozhraní pro komunikaci s uživateli vaší aplikace VBA. Také vám umožňuje zcela ovládat uživatele v tom, co dělá sešitem.

K přijetí parametrů od uživatele můžete samozřejmě použít buňky pracovního listu, ale uživatelský formulář vytváří mnohem lepší uživatelské prostředí.

Rozbalením výšky a šířky vašeho uživatelského formuláře na velikost okna aplikace Excel můžete zajistit, aby vaše aplikace vypadala jako normální aplikace systému Windows, přičemž uživatel zcela neví, že jako hostitel používá aplikaci Excel.

K dispozici máte všechny běžné ovládací prvky systému Windows, například rozevírací seznamy, seznamy a zaškrtávací políčka. Máte také obrovskou škálu metod, událostí a vlastností, které můžete použít k vylepšení uživatelského prostředí.

Důležitým bodem je, že když zobrazujete uživatelský formulář, který je integrovaný nebo je modální, nemůžete upravovat kód ve VBE ani přistupovat k žádné funkci Excelu. Kurzor se ve vašem kódu zobrazí až po zavření formuláře.

Vestavěné uživatelské formáty VBA

Excel VBA jako několik předdefinovaných formulářů, které lze použít ke komunikaci s uživatelem.

Okno zpráv

Toto je nejčastěji používaná forma ve VBA. Jednoduše zobrazí textovou zprávu, případně informující uživatele, že zadal neplatný vstup nebo že proces VBA skončil. Ve své nejjednodušší podobě zobrazují textový řetězec, ale můžete také přidat ikonu, například otazník nebo vykřičník, a dát pole se zprávou jiný název.

Toto je základní příklad. Na kliknutí je pouze jedno tlačítko a v záhlaví je uvedeno „Microsoft Excel“

Kód, který to vytvoří, je velmi přímočarý:

123 Dílčí testMsgBox ()MsgBox „Tento proces byl dokončen“End Sub

Pomocí různých parametrů můžete přidávat tlačítka, ikony a měnit záhlaví

123456789 Dílčí testMsgBox ()Dim Ret jako variantaRet = MsgBox („Jste si jisti?“, VbYesNo Nebo vbQuestion, „Moje aplikace“)Pokud Ret = vbYes Then„Váš postup zdeJinýUkončit dílčíKonec IfEnd Sub

Tento kód přidá tlačítko „Ano“ a „Ne“ a ikonu otazníku a nastaví záhlaví. Styly pole se zprávou můžete kombinovat pomocí operátoru „Nebo“

Také když vracíte hodnotu ze schránky zpráv, návratová proměnná musí být definována jako varianta nebo vbMsgBoxResult a prohlášení v okně zprávy musí používat závorky,

Vstupní pole

Do VBA je zabudováno velmi jednoduché vstupní pole, i když to, co s ním můžete dělat, je velmi omezující. Pokud můžete, je lepší navrhnout vlastní uživatelskou formu

12345 Dílčí testInputBox ()Dim Ret jako řetězecRet = InputBox („Zadejte prosím své jméno“, „Zadejte jméno“)MsgBox RetEnd Sub

Do parametrů můžete také přidat výchozí hodnotu pro vstup.

Získejte otevřené jméno souboru

To vám umožní využít dialogové okno souboru Windows v kódu VBA. Vypadá to pro uživatele velmi působivě, když je spuštěno, ale je velmi snadné jej začlenit a automaticky s ním získáte všechny funkce dialogového okna souboru.

Kód omezuje uživatele pouze na zobrazení souborů aplikace Excel. Bohužel mohli do pole Název souboru zadat název souboru, který nepochází z Excelu, a kliknout na tlačítko Otevřít, takže budete potřebovat nějaký kód, který zajistí, že byl vybrán soubor aplikace Excel.

Před zobrazením dialogového okna souboru použijte příkaz „ChDir“ ke změně výchozího adresáře podle vlastních požadavků

Všimněte si použití zástupných znaků v parametru FileFilter. Soubory aplikace Excel k zobrazení mohou být před rokem 2007, mít makra nebo být binární, takže filtr je „.xls*“.

123456 Dílčí testovací souborDialog ()Dim MyFile jako řetězecChDir "C: \ temp"MyFile = Application.GetOpenFilename ("Soubory aplikace Excel (*.xls*),*. Xls*", "Vybrat soubor")MsgBox MyFileEnd Sub

V případě potřeby můžete uživateli povolit vybrat několik souborů najednou pomocí parametru MultiSelect. Výchozí hodnota je False (pouze jeden výběr)

12345678 Dílčí testovací souborDialog ()Dim MyFile jako variantaChDir "C: \ temp"MyFile = Application.GetOpenFilename ("Soubory aplikace Excel (*.xls*),*. Xls*", "Vybrat soubor",, True)Pro každé f v MyFileMsgBox fDalší fEnd Sub

Uživatel podrží klávesu Shift v dialogu souboru pro výběr více souborů.

Smyčka For Each zobrazuje úplnou cestu a název každého vybraného souboru

Výchozí dialogy aplikace Excel

V aplikaci Excel VBA existuje kolekce Dialogs, kterou můžete použít k zobrazení jakéhokoli standardního dialogu aplikace Excel. Temnější stránkou je, že nemůžete přistupovat k parametrům, které si uživatel vybral, nebo změnit vzhled dialogu, ale tyto dialogy mohou být užitečné při nasměrování uživatele na standardní funkci Excelu a umožnění jim vybrat konkrétní parametry v dialogu.

Dobrým příkladem je zobrazení dialogového okna „Tisk“ z VBA:

123 Sub TestPrintDialog ()Application.Dialogs (xlDialogPrint). ShowEnd Sub

Když otevřete hranaté závorky v kolekci Dialogy, zobrazí se vám seznam velkého počtu konstant pro předdefinovaná dialogová okna. Stojí za to experimentovat s některými z těchto možností ve vašem kódu

Vložení nového uživatelského formuláře

Můžete navrhnout své vlastní uživatelské formuláře vložením uživatelského formuláře do editoru jazyka Visual Basic (VBE)

To provedete výběrem Vložit | UserForm na liště nabídek VBE.

Klikněte na „UserForm“ a objeví se nový prázdný formulář připravený pro další vývoj

Samotný formulář (zobrazený jako „UserForm1“) vypadá docela malý, ale můžete použít úchyty kolem něj ke zvětšení nebo ho ještě zmenšit přetažením úchytů kurzorem.

V levém dolním rohu obrazovky je okno vlastností. Jelikož je fokus přímo na samotném formuláři, obsahuje všechny vlastnosti pro formulář specifický pro tento formulář.

Všimněte si toho, že když začnete přidávat ovládací prvky, jako jsou pole se seznamem a příkazová tlačítka, všechny tyto ovládací prvky mají vlastní sadu vlastností a mohou se velmi lišit v tom, co můžete s každým z nich dělat.

Vlastnosti, které vidíte aktuálně, platí pouze pro samotný formulář.

Vlastnost „Název“ je název používaný k definování objektu formuláře v kódu VBA. Pro název objektu můžete chtít použít něco smysluplnějšího, aby při kontrole kódu bylo zřejmé, jaký formulář se používá.

Vlastnost „Název“ se projeví také v okně „Průzkumník projektů“ v levém horním rohu obrazovky

Budete chtít změnit záhlaví svého formuláře na něco jiného než „UserForm1“, a můžete to udělat zadáním nového textu do vlastnosti „Titulek“

Můžete provést obrovské množství změn v tom, jak uživatel vidí váš formulář. Můžete měnit barvy, přidávat obrázky např. firemní logo, změňte polohu pomocí „doleva“ a „nahoře“, změňte velikost pomocí „výšky“ a „šířky“, změňte ukazatel myši a mnoho dalších

Všechny tyto vlastnosti lze také programově změnit pro jakýkoli ovládací prvek, který jste přidali do formuláře. Uživatel si například může vybrat z ovládacího prvku seznamu a možná budete chtít zakázat nebo skrýt další ovládací prvky na základě výběru uživatele.

Pomocí Toolboxu

Všimnete si, že když kliknete na samotný formulář, zobrazí se vyskakovací okno s nástroji. Pokud kliknete kamkoli jinam, např. podokno vlastností zmizí, ale znovu se objeví po kliknutí na formulář.

Sada nástrojů poskytuje skutečnou mechaniku návrhu formuláře. To vám umožní přidat normální ovládací prvky systému Windows, které uživatelé znají, do vašeho formuláře.

Všimněte si, že ve formuláři je síť bodů. Jedná se o „snapgrid“, takže když do formuláře přidáte ovládací prvek, automaticky zarovná pozici s řádky a sloupci bodů. To nesmírně pomáhá při zarovnání ovládacích prvků, aby vaše ovládací prvky neměly otrhaný vzhled

Pokud kliknete na ovládací prvek a poté se rozhodnete jej nepoužít, kliknutím na ikonu „Šipka“ v levém horním rohu panelu nástrojů se kurzor změní na normální.

Do panelu nástrojů můžete přidat další ovládací prvky pomocí Nástroje | Další ovládací prvky v nabídce VBE. K dispozici je značný počet těchto, ale v závislosti na vašich verzích Windows a Excelu nefungují vždy, takže je často vyžadováno určité experimentování.

Vaši uživatelé také nemusí mít přístup k některým z těchto doplňkových ovládacích prvků nebo mohou používat starší verze systému Windows a Excel, což může způsobit problémy. Ve velkých organizacích, zejména pokud jsou globální, neexistuje nic takového jako standardní sestavení počítače, na které byste se mohli spolehnout!

Přidání tlačítka Konec do vašeho formuláře

Tlačítko příkazu lze snadno přidat do formuláře. Vypadá to stejně jako tlačítka, která vidíte v jiných formulářích Windows, obvykle jako tlačítko „OK“ nebo „Zrušit“.

Klikněte na ikonu Command Button v panelu nástrojů. Toto je druhá ikona zleva ve spodním řádku ikon. Viz obrázek výše. Jsou na něm písmena „ab“.

Buď můžete podržet tlačítko myši a přetáhnout ovládací prvek do formuláře, nebo můžete přesunout kurzor na formulář, kde se změní na „křížový“ kurzor a můžete umístit a velikost tlačítka

Pokud přetáhnete ovládací prvek do formuláře, získáte výchozí velikost tlačítka. Přesunutí kurzoru na formulář vám umožní změnit velikost tlačítka přetažením „křížového“ kurzoru přes formulář

Váš formulář nyní bude vypadat takto:

Tlačítko bude mít jako nadpis výchozí text, ale budete ho chtít změnit podle svých vlastních požadavků. Můžete kliknout na text v tlačítku („CommandButton1“) a to vám umožní přímo upravit popisek.

Můžete jej také změnit v okně vlastností (levý dolní roh obrazovky). Uvidíte vlastnost s názvem „Titulek“ a můžete pro ni upravit hodnotu. Změňte to na „Konec“

Stejně jako u vlastností formuláře definuje vlastnost ‘Název’ název, který bude použit ve vašem kódu VBA. Možná budete chtít použít název, který je ve vašem kódu smysluplnější a zřejmý. Můžete to zadat proti vlastnosti ‘Jméno’.

Tlačítko můžete přemístit přetažením ve formuláři a jeho velikost můžete změnit kliknutím na úchyty tlačítek (bílá čtvercová pole) a přetažením úchytů jej zvětšíte nebo zmenšíte

Tlačítko můžete také změnit velikost změnou hodnot Výška a Šířka v okně vlastností

Formulář můžete zobrazit v aplikaci Excel kliknutím na zelený trojúhelník na panelu nástrojů VBE nebo stisknutím klávesy F5

Svůj formulář můžete zavolat z kódu VBA v rámci modulu pomocí metody „Zobrazit“

123 Sub ShowForm ()UserForm1.ShowEnd Sub

Vaše uživatelská forma je ve skutečnosti globálním objektem a lze ji volat odkudkoli z vašeho kódu

V současné době vaše příkazové tlačítko nedělá nic, protože za ním není žádný kód VBA. To musíte napsat sami! V tuto chvíli se může stát jen to, že můžete kliknout na „Zavřít“ X v pravém horním rohu formuláře.

Chcete -li přidat kód VBA, dvakrát klikněte na tlačítko ve formuláři

Tím se dostanete do normálního okna kódu VBA a zobrazí výchozí událost kliknutí.

K zavření formuláře použijete metodu „Skrýt“ a můžete také přidat jakýkoli jiný kód, například pole se zprávou, které uživateli potvrdí, co se stalo.

Všimněte si, že okno kódu má v horní části dvě rozbalovací nabídky. První umožňuje vybrat ovládací prvky formuláře a druhý zobrazuje všechny události, které jsou k dispozici pro přidání kódu. Zjevným tlačítkem je událost „Kliknutí“, ale existují i ​​další, například „Dvojité kliknutí“ nebo „Pohyb myši“

Když nyní spustíte formulář, tlačítko ve skutečnosti něco dělá. Formulář zmizí a zobrazí se okno se zprávou potvrzující, že je formulář zavřený

Ukončovací kód můžete samozřejmě zvětšit. Možná budete chtít zobrazit jiný formulář nebo provést akci ohledně parametrů, které uživatel zadal do vašeho formuláře

Přidání ovládacího prvku štítku do formuláře

Ovládací prvky štítků slouží k vyzvání uživatele, jaký druh dat potřebuje k zadání ovládacího prvku ve formuláři, např. textové pole, rozevírací nabídka atd. Štítek ve výchozím nastavení nemá ohraničení, ale v případě potřeby je lze přidat pomocí okna vlastností.

Ovládací prvky jsou čteny pouze uživateli a jsou jednoduše způsobem, jak vložit text do formuláře, ať už jde o tučné nadpisy nebo pokyny, co zadat nebo vybrat.

Chcete -li přidat štítek, klikněte na ikonu „A“ v panelu nástrojů (horní řádek, druhý zleva) a buď na něj dvakrát klikněte, nebo přesuňte kurzor na formulář a vyberte pozici a velikost.

Pomocí vlastnosti „Titulek“ v okně vlastností nebo kliknutím na ovládací prvek štítku můžete zadat text pro ovládací prvek štítku.

Všimněte si, že se text zalomí podle velikosti ovládacího prvku popisku, a pokud je řetězec textu příliš dlouhý, nezobrazí se ve formuláři úplně, takže je třeba dávat pozor na velikost ovládacího prvku popisku.

Pomocí okna vlastností můžete změnit vzhled ovládacího prvku štítku pomocí různých barev, písem, stylu zad, např. pokud překrývá obrázek a chcete, aby byl průhledný

Pro ovládací prvek štítku není třeba vytvářet žádný kód. Hlavním účelem je přidat text do formuláře, aby uživatel viděl, jak fungují všechny ostatní ovládací prvky

Přidání ovládacího prvku textu do formuláře

Pomocí textového ovládacího prvku může uživatel zadávat text, například zadávat jméno nebo komentáře

Ovládací prvek textu se přidá z panelu nástrojů kliknutím na ikonu ovládání textu (horní řádek, třetí zleva) a dvojitým kliknutím nebo přetažením ovládacího prvku na místo ve formuláři.

Ovládací prvek textu je často zaměňován s ovládacím prvkem popisku, ale ovládací prvek textu je ten, který zadává uživatel

Text „Zadejte své jméno“ je ovládací prvek štítku, jak bylo popsáno dříve, a nyní máme pro uživatele připraveno bílé textové pole, do kterého může něco zadat.

Pomocí okna vlastností můžete změnit barvy, písma, speciální efekty nebo použít znaky hesla pro textové pole. K dispozici je obrovská flexibilita

Jednou z velmi důležitých vlastností textového pole je vlastnost „MultiLine“. Pokud chcete, aby uživatel zadal velké množství textu do ovládacího prvku textu, např. komentáře, pak vlastnost ‘MultiLine’ musí být nastavena na True.

Jedná se o výchozí hodnotu False, což znamená, že jakkoli velké textové pole vytvoříte, zadaný text zůstane na jednom souvislém řádku a bude se posouvat z textového pole. V krabici se neobejde.

Když kliknete pravým tlačítkem na textové pole, které je spuštěné, nezobrazí se žádné vyskakovací okno, ale CTRL+V bude fungovat pro Vložit a CTRL+C bude fungovat pro Vyjmout, pokud chce uživatel vyjmout a vložit text do az jiného aplikace

Znovu musíte napsat svůj vlastní kód, abyste se vypořádali s textem, který uživatel zadal. Můžete jej přenést do buňky v listu

Tento kód můžete přidat do události „Změnit“ pro textové pole

123 Private Sub TextBox1_Change ()Listy („List1“). Rozsah („A1“). Hodnota = TextBox1.HodnotaEnd Sub

Můžete také vložit ověřovací kód, abyste zkontrolovali, zda uživatel nevkládá odpadky, což bude mít na vaši aplikaci katastrofální dopady

Událost změny k tomu není dobrá, protože je volána pokaždé, když uživatel zadá nový znak. Uživatel mohl začít psát řetězec textu a okamžitě zjistit, že porušil vaše ověřovací pravidla, než dokončil platný text.

Používáte událost „Konec“. To se spustí, když uživatel přesune fokus na jiný ovládací prvek ve formuláři, což znamená, že uživatel již nezadává data.

123456 Private Sub TextBox1_Exit (ByVal Cancel As MSForms.ReturnBoolean)If IsNull (TextBox1.Value) Nebo Len (TextBox1.Value) <4 ThenMsgBox "Název je neplatný", vbCriticalTextBox 1. SetFocusKonec IfEnd Sub

Když uživatel klikne na jiný ovládací prvek ve formuláři, tento kód testuje buď hodnotu null v textovém poli, nebo méně než 4 znaky. Pokud je test pravdivý, zobrazí se okno se zprávou s kritickou ikonou, která uživatele informuje, že jméno je neplatné, a fokus se přesune zpět do problematického textového pole, aby jej uživatel mohl opravit.

Všimněte si, že i když uživatel klikne na tlačítko Konec, bude nejprve provedena událost ukončení textového pole, takže to zabrání uživateli opustit bez opravy zadávání

Inicializujte a aktivujte události ve formuláři

Když VBA poprvé vytvoří a vytvoří formulář, spustí událost „Inicializace“. Protože se však v tomto bodě zobrazí také formulář, spustí také událost „Aktivovat“. Od té doby pokaždé, když se formulář zobrazí pomocí metody „Zobrazit“ nebo se objeví jako součást hierarchie formulářů, spustí se událost „Aktivovat“, nikoli však událost „Inicializovat“

Událost „Inicializovat“ se stane pouze jednou, ale událost „Aktivovat“ se může stát mnohokrát

Na formuláři možná budete chtít nastavit výchozí hodnoty z listu v ovládacích prvcích vstupu, např. textová pole, aby se zobrazila při prvním použití formuláře, ale uživatel může přepsat výchozí hodnoty a tyto nové hodnoty zůstanou na místě, dokud bude spuštěn kód

12345678 Private Sub UserForm_Initialize ()TextBox1.Value = Listy ("List1"). Rozsah ("A1"). HodnotaPokud TextBox1.Value = ”” PotomTextBox1.Visible = FalseJinýTextBox1.Visible = TrueKonec IfEnd Sub

Událost „Inicializovat“ najdete ve druhém rozevíracím seznamu v okně kódu a jméno uživatele v prvním rozevíracím seznamu.

Tento kód použije hodnotu v buňce A1 na ‘List1’ jako výchozí hodnotu v textovém poli vytvořeném dříve v tomto článku. Když se formulář zobrazí poprvé, zobrazí se výchozí hodnota. Uživatel pak může přepsat výchozí hodnotu a ta zůstane zachována. Pokud je CellA1 prázdné, textové pole bude skryto, jinak bude viditelné

Výchozí hodnota může být také pevně kódována:

1 TextBox1.Value = „John Smith“

Můžete také chtít zajistit, aby se hodnoty, které uživatel zadal, znovu zobrazily, kdykoli uživatel v dané relaci aplikace Excel tento formulář spustí. Kód VBA může snadno zapsat hodnoty zpět do buněk v sešitu pomocí události „Exit“ na ovládacím prvku a znovu je vytvořit pomocí události „Activate“ ve formuláři

123 Private Sub TextBox1_Exit (ByVal Cancel as MSForms.ReturnBoolean)Listy („List1“). Rozsah („A10“). Hodnota = TextBox1.HodnotaEnd Sub
123 Private Sub UserForm_Activate ()TextBox1.Value = Listy ("List1"). Rozsah ("A10"). HodnotaEnd Sub

Tento kód zajistí, že hodnoty uživatele budou trvalé a také zajistí, že budou uloženy se zbytkem sešitu

Uložení aplikace a formulářů

Když uložíte sešit aplikace Excel obsahující vaše formuláře, uloží se také všechny formuláře a jejich kód VBA. Budou však ztraceny všechny hodnoty, které formuláře obsahují, zatímco jsou zobrazeny.

Je důležité psát kód, takže když uživatel opustí sešit nebo formulář, hodnoty se zapíší zpět do buněk v sešitu, a tak zůstanou zachovány.

Modální a nemodální formuláře

Samotný formulář má vlastnost „Zobrazit modal“. Toto je ve výchozím nastavení nastaveno na True, ale lze jej změnit na False (nemodální)

Pokud je formulář modální, znamená to, že při zobrazování formuláře nelze přistupovat k žádné z funkcí Excelu. To zahrnuje váš kód v okně VBE. Kód můžete zobrazit, ale kurzor a klávesnice jsou deaktivovány.

V nemodální podobě máte během zobrazování formuláře přístup ke všem funkcím Excelu, včetně okna VBE.

To je důležité z hlediska řízení chování uživatelů

Zavření formuláře

Ať už kód napíšete jakkoli, abyste uživatele donutili sestoupit po určité trase, může jej snadno obejít kliknutím na „Zavřít“ X v pravém horním rohu formuláře

Tomu můžete zabránit změnou události „QueryClose“ ve formuláři

1234 Private Sub UserForm_QueryClose (Zrušit jako celé číslo, CloseMode jako celé číslo)Zrušit = PravdaMsgBox "Tato akce je zakázána"End Sub

Událost „QueryClose“ se spustí, když uživatel klikne na „Zavřít“ X formuláře. Tento kód zruší akci, takže je uživatel nucen použít tlačítko „Konec“ a kód, který za ním máte.

Povolení a zakázání ovládacích prvků

Všechny ovládací prvky ve vašem formuláři mají vlastnost nazvanou „Povoleno“, která je nastavena na hodnotu True nebo False. Pokud je False, pak je ovládací prvek šedý. Je to vidět, ale nelze to použít.

Existuje také vlastnost s názvem „Viditelný“, která je opět nastavena na hodnotu True nebo False.

Kód můžete napsat tak, aby byl určitý ovládací prvek nepoužitelný, nebo aby byl pro uživatele zcela neviditelný. Pomocí příkazu „If“ si můžete vybrat okolnosti, kdy to musíte udělat

Například můžete na začátku deaktivovat tlačítko „Konec“, dokud uživatel nezadá hodnotu do TextBox1 (název)

123 Private Sub UserForm_Initialize ()CommandButton1.Enabled = FalseEnd Sub
1234567 Private Sub TextBox1_Change ()Pokud Len (TextBox1.Value)> 0 ThenCommandButton1.Enabled = TrueJinýCommandButton1.Enabled = FalseKonec IfEnd Sub

Tento kód používá událost 'Inicializovat' k deaktivaci tlačítka ukončení (příkazové tlačítko 1) při prvním zobrazení formuláře a poté pomocí události 'Změnit' na TextBox1 (název) povolí tlačítko Konec, pokud bylo něco zadáno nebo zakázáno pokud je pole prázdné.

Událost „Změnit“ se spustí pokaždé, když do textového pole zadáte nebo odstraníte nový znak. Pokud se uživatel pokusí zadat text, aby bylo tlačítko aktivní, a poté smaže veškerý text, tlačítko bude okamžitě deaktivováno

Vám pomůže rozvoji místa, sdílet stránku s přáteli

wave wave wave wave wave