The Rezervační formulář kurzu je jednoduchý formulář ilustrující principy návrhu UserForm a související kódování VBA.
Používá výběr ovládacích prvků včetně textových polí, kombinovaných polí, tlačítek možností seskupených do rámečku, zaškrtávacích políček a příkazových tlačítek.
Když uživatel klikne na tlačítko OK, jeho vstup se zadá do dalšího dostupného řádku na listu.
Popis excelové formy:
Existují dvě jednoduchá textová pole (Název: a Telefon:), do kterého může uživatel psát volný text, a dvě pole se seznamem (oddělení a Kurs), která uživateli umožňuje vybrat položku ze seznamu.
K dispozici jsou tři volitelná tlačítka (Úvod, středně pokročilí a Pokročilý) seskupeny v rámečku (Úroveň), aby si uživatel mohl vybrat pouze jednu z možností.
K dispozici jsou dvě zaškrtávací políčka (Je nutný oběd a Vegetariánský), protože protože nejsou seskupeny do rámce, lze v případě potřeby zvolit oba. Pokud však osoba provádějící rezervaci nechce oběd, nemusíme vědět, zda jsou vegetariáni. Takže Vegetariánský zaškrtávací políčko je zašedlé, dokud není požadováno.
K dispozici jsou tři příkazová tlačítka (OK, zrušení a Jasná forma), z nichž každý po kliknutí provádí předdefinovanou funkci.
Nastavení vlastností ovládání:
Řízení | Typ | Vlastnictví | Nastavení |
UserForm | UserForm | název | frmCourseBooking |
Titulek | Rezervační formulář kurzu | ||
název | Textové pole | název | txtName |
Telefon | Textové pole | název | txtPhone |
oddělení | Kombinovaný box | název | cboOddělení |
Kurs | Kombinovaný box | název | Kurz cbo |
Úroveň | Rám | název | fraLevel |
Titulek | Úroveň | ||
Úvod | Tlačítko volby | název | optIntroduction |
středně pokročilí | Tlačítko volby | název | optIntermediate |
Pokročilý | Tlačítko volby | název | optAdvanced |
Je nutný oběd | Zaškrtávací políčko | název | chkLunch |
Vegetariánský | Zaškrtávací políčko | název | chkVegetarián |
Povoleno | Nepravdivé | ||
OK | Příkazové tlačítko | název | cmdOk |
Titulek | OK | ||
Výchozí | Skutečný | ||
zrušení | Příkazové tlačítko | název | cmdCancel |
Titulek | zrušení | ||
zrušení | Skutečný | ||
Jasná forma | Příkazové tlačítko | název | cmdClearForm |
Vytváření formulářů v aplikaci Excel
Pokud chcete formulář sestavit sami, jednoduše zkopírujte rozvržení zobrazené na obrázku výše. Postupujte podle následujících kroků:
1. Otevřete sešit, do kterého chcete, aby do něj formulář patřil (do sešitu je třeba připojit makra typu UserForms) a přepněte do editoru jazyka Visual Basic.
2. V editoru jazyka klepněte na Vložte UserForm tlačítko (nebo přejděte na Vložit> UserForm).
3. Pokud se panel nástrojů nezobrazí sám (nejprve kliknutím na formulář zkontrolujte, zda se neskrývá), klikněte na Sada nástrojů tlačítko (nebo přejděte na Zobrazit> Panel nástrojů).
4. Chcete -li na formulář umístit ovládací prvek, klikněte na příslušné tlačítko na panelu nástrojů a poté klikněte na formulář. Ovládací prvky lze přesouvat přetažením za okraje nebo změnit velikost přetažením tlačítek po jejich obvodu.
5. Chcete -li upravit vlastnosti ovládacího prvku, ujistěte se, že je vybraný vybraný ovládací prvek, a poté proveďte příslušné změny v Vlastnosti okno. Pokud nevidíte okno vlastností, přejděte na Okno Zobrazit> Vlastnosti.
6. Chcete -li odebrat ovládací prvek z formuláře, vyberte jej a klikněte na Vymazat klávesu na klávesnici.
UserForm ve skutečnosti neudělá nic, dokud není vytvořen kód, který pohání formulář a jeho různé ovládací prvky. Dalším krokem je napsat kód, který řídí samotný formulář.
Přidání kódu: 1 Inicializace formuláře
Inicializace formuláře:
Většina formulářů potřebuje po otevření nějaké nastavení. Může se jednat o nastavení výchozích hodnot, kontrolu, zda jsou pole prázdná, nebo vytváření seznamů seznamů. Tento proces se nazývá Inicializace formuláře a stará se o to makro s názvem UserForm_Initialize (v případě, že jste zmateni mým měnícím se hláskováním slova „initialis (z) e“, je to proto, že mluvím anglicky a VBA mluví americky - ale nebojte se, VBA bude kouzlo pro vás!). Zde je návod, jak vytvořit kód pro inicializaci formuláře rezervace kurzu:
1. Chcete -li zobrazit okno kódu formuláře, přejděte na Zobrazit> Kód nebo klikněte F7.
2. Když se okno kódu poprvé otevře, obsahuje prázdné UserForm_Click () postup. K výběru použijte rozevírací seznamy v horní části okna kódu UserForm a Inicializovat. Tím vytvoříte postup, který potřebujete. Nyní můžete proceduru UserForm_Click () odstranit.
3. Do postupu zadejte následující kód:
Private Sub UserForm_Initialize () txtName.Value = "" txtPhone.Value = "" S cboDepartment .AddItem "Prodej" .AddItem "Marketing" .AddItem "Správa" .AddItem "Design" .AddItem "Reklama" .AddItem "Odeslání". AddItem "Transportation" End with cboDepartment.Value = "" With cboCourse .AddItem "Access" .AddItem "Excel" .AddItem "PowerPoint" .AddItem "Word" .AddItem "FrontPage" End With cboCourse.Value = "" optIntroduction = True chkLunch = False chkVegetarian = False txtName.SetFocus End Sub
Jak funguje inicializační kód:
Účelem procedury UserForm_Initialize () je připravit uživatelský formulář ve VBA k použití, nastavit výchozí hodnoty pro různé ovládací prvky a vytvořit seznamy, které zobrazí pole se seznamem.
Tyto řádky nastavují vyprázdnění obsahu dvou textových polí:
txtName.Value = "" txtPhone.Value = ""
Dále přicházejí pokyny ke kombinovaným boxům. Nejprve je určen obsah seznamu a poté je počáteční hodnota pole se seznamem prázdná.
S cboDepartment .AddItem „Prodej“ .AddItem „Marketing“ (tolik, kolik je potřeba…) Konec
cboDepartment.Value = ""
V případě potřeby lze ze skupiny možností provést počáteční výběr, v tomto případě:
optIntroduction = True
Obě zaškrtávací políčka jsou nastavena na hodnotu False (tj. Žádné zaškrtnutí). Pokud chcete, aby se zaškrtávací políčko zobrazovalo již zaškrtnuté, nastavte na hodnotu True:
chkLunch = False
chkVegetarian = Falešný
Nakonec se fokus přesune do prvního textového pole. Tím se umístí kurzor uživatele do textového pole, aby nemuseli na toto pole klikat, než začnou psát:
txtName.SetFocus
Přidání kódu: 2 Aby tlačítka fungovala
Na formuláři jsou tři příkazová tlačítka a každé musí být napájeno vlastním postupem. Počínaje těmi jednoduchými…
Kódování tlačítka Storno:
Dříve jsme pomocí okna Vlastnosti nastavili zrušení vlastnost tlačítka Storno na Skutečný. Když nastavíte vlastnost Storno příkazového tlačítka na True, má to za následek „kliknutí“ na toto tlačítko, když uživatel stiskne Esc klávesu na jejich klávesnici. Ale to samo o sobě nezpůsobí, že by se formě něco stalo. Musíte vytvořit kód pro událost kliknutí tlačítka, která v tomto případě zavře formulář. Zde je postup:
1. Otevřete UserForm pro úpravy v editoru jazyka, poklepejte na tlačítko Storno. Otevře se okno s kódem formuláře s příponou cmdCancel_Click () postup připraven k úpravám.
2. Kód pro uzavření formuláře je velmi jednoduchý. Přidejte do postupu řádek kódu, aby vypadal takto:
Private Sub cmdCancel_Click () Unload Me End Sub
Kódování tlačítka Vymazat formulář:
Přidal jsem tlačítko pro vymazání formuláře pro případ, že by uživatel chtěl změnit názor a vše resetovat, a aby to bylo snazší, pokud bylo třeba provést několik rezervací najednou. Vše, co musíte udělat, je znovu spustit proceduru inicializace. Makru lze říci, aby spustilo jiné makro (nebo v případě potřeby řadu maker) pomocí Volání klíčové slovo:
1. Poklepejte na tlačítko Vymazat formulář. Otevře se okno s kódem formuláře s příponou cmdClearForm_Click () postup připraven k úpravám.
2. Přidejte do postupu řádek kódu, aby vypadal takto:
Private Sub cmdClearForm_Click () Volání UserForm_Initialize End Sub
Kódování tlačítka OK:
Toto je část kódu, která má za úkol přenést volby uživatele a zadávání textu na list. Když nastavíme vlastnost Cancel tlačítka na Cancel na True, nastavíme také tlačítko OK Výchozí majetek k Skutečný. To má za následek kliknutí na tlačítko OK, když uživatel stiskne Vstupte (nebo Vrátit se) na jejich klávesnici (za předpokladu, že nepoužili jejich Tab klíč na kartu na jiné tlačítko). Zde je kód, aby tlačítko fungovalo:
1. Poklepejte na tlačítko OK. Otevře se okno s kódem formuláře s příponou cmdOK_Click () postup připraven k úpravám.
2. Upravte postup a přidejte následující kód:
Private Sub cmdOK_Click () ActiveWorkbook.Sheets ("Course Bookings"). Activate Range ("A1"). Select Do If IsEmpty (ActiveCell) = FalseThen ActiveCell.Offset (1, 0). Select End If Loop until IsEmpty (ActiveCell) = True ActiveCell.Value = txtName.Value ActiveCell.Offset (0, 1) = txtPhone.Value ActiveCell.Offset (0, 2) = cboDepartment.Value ActiveCell.Offset (0, 3) = cboCourse.Value If optIntroduction = True Then ActiveCell.Offset (0, 4) .Value = "Intro" ElseIf optIntermediate = True Then ActiveCell.Offset (0, 4) .Value = "Intermed" Else ActiveCell.Offset (0, 4) .Value = "Adv" End If If chkLunch = True Then ActiveCell.Offset (0, 5) .Value = "Yes" Else ActiveCell.Offset (0, 5) .Value = "No" End If If chkVegetarian = True Then ActiveCell.Offset (0, 6). Value = "Yes" Else If chkLunch = False Then ActiveCell.Offset (0, 6) .Value = "" Else ActiveCell.Offset (0, 6) .Value = "No" End If End If Range ("A1"). Vyberte End Sub
Jak kód CmdOK_Click funguje:
První dva řádky se ujistěte, že je aktivní správný sešit, a přesune výběr do buňky A1:
ActiveWorkbook.Sheets ("Course Bookings"). Activate Range ("A1"). Select The next few lines moving the selection down the worksheet until it find an empty cell: Do If IsEmpty (ActiveCell) = False Then ActiveCell.Offset (1 , 0). Vyberte Konec, pokud je smyčka do prázdna (ActiveCell) = True
Další čtyři řádky začnou zapisovat obsah formuláře na list pomocí aktivní buňky (která je ve sloupci A) jako odkazu a přesunutí podél řady buňka najednou:
ActiveCell.Value = txtName.Value ActiveCell.Offset (0, 1) = txtPhone.Value ActiveCell.Offset (0, 2) = cboDepartment.Value ActiveCell.Offset (0, 3) = cboCourse.Value
Nyní se dostáváme k tlačítkům možností. Ty byly umístěny do rámečku ve formuláři, aby si uživatel mohl vybrat pouze jeden. Příkaz IF se používá k instruování Excelu, co má dělat pro každou možnost:
Pokud optIntroduction = True Then ActiveCell.Offset (0, 4) .Value = "Intro" ElseIf optIntermediate = True Then ActiveCell.Offset (0, 4) .Value = "Intermed" Else ActiveCell.Offset (0, 4) .Value = "Adv" Konec Pokud
Příkazy IF VBA jsou mnohem jednodušší než funkce IF aplikace Excel. Můžete mít tolik možností, kolik chcete, stačí vložit další Jinak pro každého. Pokud by existovaly pouze dvě možnosti, nepotřebovali byste Jinak, právě Li a Jiný by stačilo (nezapomeňte - všichni potřebují Konec If).
Pro každé zaškrtávací políčko existuje další příkaz IF. Zaškrtávací políčko Povinný oběd znamená zaškrtnutí políčka „Ano“. Osoba vyžaduje oběd a žádné zaškrtnutí znamená „Ne“.
If chkLunch = True Then ActiveCell.Offset (0, 5) .Value = "Yes" Else ActiveCell.Offset (0, 5) .Value = "No" End If
Podobný příkaz IF bychom mohli použít pro zaškrtávací políčko Vegetarián, ale pokud dotyčný nevyžaduje oběd, je irelevantní, zda je nebo není vegetarián. V každém případě by bylo špatné předpokládat, že nebyli vegetariáni jen proto, že nevyžadovali oběd. Příkaz IF proto obsahuje druhý, vnořený příkaz if:
If chkVegetarian = True Then ActiveCell.Offset (0, 6) .Value = "Yes" Else If chkLunch = False Then ActiveCell.Offset (0, 6) .Value = "" Else ActiveCell.Offset (0, 6) .Value = „Ne“ Konec Pokud Konec Pokud
Zaškrtnutí v políčku znamená „Ano“, osoba je vegetarián. Pokud v políčku není zatržítko, vnořený příkaz IF se podívá na zaškrtávací políčko Povinný oběd. Pokud je v zaškrtávacím políčku Povinný oběd zaškrtnuto, znamená to, že pokud toto políčko nezaškrtnete, znamená to, že daný člověk není vegetarián, a tak do buňky vloží „Ne“. Pokud však zaškrtávací políčko Povinný oběd nemá zaškrtnutí, pak nevíme, zda je nebo není osoba vegetarián (na tom stejně nezáleží), takže buňka zůstane prázdná („“).
Nakonec se výběr vrátí zpět na začátek listu a je připraven k dalšímu zadání:
Rozsah („A1“). Vyberte
Přidání kódu 3: Manipulace s formulářem
Nakonec příklad toho, jak lze manipulovat s ovládacími prvky na formuláři, když je používán. Když byly nastaveny vlastnosti ovládacího prvku, Povoleno vlastnost zaškrtávacího políčka Vegetarián byla nastavena na Nepravdivé. Není -li ovládací prvek povolen, uživatel nemůže do něj zadat hodnotu, přestože může obsahovat hodnotu, která zde již byla, a VBA může hodnotu přidat, odebrat nebo změnit.
Pokud si neobjedná oběd, nemusíme vědět, zda je či není vegetarián (i když jsou!) Vegetariánské zaškrtávací políčko tedy zůstane neaktivní, pokud nezaškrtnete políčko Povinný oběd. Poté může uživatel volně zaškrtnout políčko Vegetarián, pokud chce. Pokud zaškrtnou, budeme vědět, že odpověděli „Ano“, a pokud ne, víme, že odpověděli „Ne“.
Můžeme přepnout Povoleno majetek od Nepravdivé na Skutečný tím, že má postup, který se spustí automaticky, kdykoli se změní hodnota zaškrtávacího políčka Povinný oběd. Naštěstí má více ovládacích prvků a Změna postup a ten, který zde používáme, je chkLunch_Change (). Použijeme to k povolení zaškrtávacího políčka Vegetarián, pokud je zaškrtnuto políčko Povinný oběd, a deaktivujeme jej, pokud není zaškrtnuto políčko Povinný oběd.
Je tu ještě jedna věc, kterou musíme udělat. Předpokládejme, že někdo zaškrtl políčko Povinný oběd a také zaškrtávací políčko Vegetarián. Potom si to rozmysleli a zatrhli zaškrtávací políčko Povinný oběd. Zaškrtávací políčko Vegetarián bude deaktivováno, ale zaškrtnutí, které bylo vloženo dříve, zůstane.
Další řádek kódu může zajistit, aby bylo zaškrtnutí odstraněno, když je pole deaktivováno. Tady je celá věc:
Private Sub chkLunch_Change () If chkLunch = True Then chkVegetarian.Enabled = True Else chkVegetarian.Enabled = False chkVegetarian = False End If End Sub
Otevření formuláře
Formulář je nyní připraven k použití, takže je třeba jej otevřít pomocí jednoduchého makra. To lze připojit k tlačítku vlastního panelu nástrojů, příkazovému tlačítku nakreslenému na listu nebo libovolné grafice (klikněte pravým tlačítkem na grafiku a vyberte Přiřadit makro). V případě potřeby vytvořte nový modul pro sešit a přidejte tento postup:
Sub OpenCourseBookingForm () frmCourseBooking.Show End Sub
Pokud se vám naše blogy líbily, sdílejte je se svými přáteli na Facebooku. A také nás můžete sledovat na Twitteru a Facebooku.
Rádi bychom od vás slyšeli, dejte nám vědět, jak můžeme zlepšit, doplnit nebo inovovat naši práci a zlepšit ji pro vás. Napište nám na e -mail