Rovnako ako ľudia, domáce zvieratá a hurikány, každá procedúra sub a funkcie Excel VBA musí mať názov. Aj keď je úplne prijateľné pomenovať svojho psa Hairball Harris, zvyčajne nie je dobrý nápad použiť takýto voľný prístup pri pomenovaní procedúr Excl VBA. Pri pomenovávaní procedúr Excel VBA musíte dodržiavať niekoľko pravidiel:
- Môžete použiť písmená, čísla a niektoré interpunkčné znaky, ale prvý znak musí byť písmeno.
- V názve nemôžete použiť žiadne medzery ani bodky.
- VBA nerozlišuje medzi veľkými a malými písmenami.
- V názve procedúry nemôžete použiť žiadny z nasledujúcich znakov: #, $, %, &, @, ^, * alebo !. Inými slovami, názov vašej procedúry nemôže vyzerať ako nadávky v komikse.
- Ak napíšete procedúru Function na použitie vo vzorci, nepoužívajte názov, ktorý vyzerá ako adresa bunky (napríklad A1 alebo B52). V skutočnosti Excel umožňuje takéto názvy funkcií, ale prečo robiť veci viac mätúcimi, ako už sú?
- Názvy procedúr nemôžu byť dlhšie ako 255 znakov. (Samozrejme, nikdy by ste nepomenovali postup tak dlho.)
V ideálnom prípade názov procedúry popisuje účel rutiny. Osvedčeným postupom je vytvoriť názov kombináciou slovesa a podstatného mena – napríklad ProcessData, PrintReport, Sort_Array alebo CheckFilename.
Niektorí programátori uprednostňujú používanie názvov podobných vetám, ktoré poskytujú úplný popis postupu. Niektoré príklady zahŕňajú WriteReportToTextFile a Get_Print_Options_and_Print_Report. Používanie takýchto dlhých názvov má svoje výhody aj nevýhody. Na jednej strane sú takéto názvy opisné a zvyčajne jednoznačné. Na druhej strane ich písanie trvá dlhšie. Každý si vytvorí štýl pomenovania, ale ak vaše makro nie je len rýchle a špinavé dočasné makro, je dobré byť popisný a vyhnúť sa nezmyselným názvom ako DoIt, Update, Fix a stále populárnejšie Macro1.
Vykonávanie procedúr Excel VBA Sub
Aj keď v tomto bode možno neviete veľa o vývoji procedúr Sub, je dôležité vedieť, ako tieto procedúry vykonávať. Procedúra Sub je bezcenná, pokiaľ neviete, ako ju vykonať.
Mimochodom, vykonanie procedúry Sub znamená to isté ako spustenie alebo volanie procedúry Sub. Môžete použiť akúkoľvek terminológiu, ktorú chcete.
Sub VBA Sub môžete spustiť mnohými spôsobmi; to je jeden z dôvodov, prečo môžete robiť toľko užitočných vecí pomocou procedúr Sub. Tu je úplný zoznam spôsobov vykonania procedúry Sub:
- Vyberte Spustiť → Spustiť Sub/UserForm (vo VBE). Excel vykoná procedúru Sub, v ktorej sa nachádza kurzor. Tento príkaz ponuky má dve alternatívy: kláves F5 a tlačidlo Run Sub/UserForm na štandardnom paneli nástrojov vo VBE. Tieto metódy nefungujú, ak postup vyžaduje jeden alebo viac argumentov.
- Použite dialógové okno Makro v Exceli. Toto pole otvoríte výberom Vývojár → Kód → Makrá alebo výberom Zobraziť → Makrá → Makrá. Alebo obíďte pás s nástrojmi a stlačte Alt + F8. Keď sa zobrazí dialógové okno Makro, vyberte požadovanú procedúru Sub a kliknite na tlačidlo Spustiť. V tomto dialógovom okne sú uvedené iba postupy, ktoré nevyžadujú argument.
- Stlačte Ctrl+kláves (alebo Ctrl+Shift+kláves) priradený k procedúre Sub (za predpokladu, že ste ju priradili).
- Kliknite na tlačidlo alebo tvar v pracovnom hárku. Tlačidlo alebo tvar musí mať priradenú procedúru Sub – čo je veľmi jednoduché.
- Z inej procedúry Sub, ktorú píšete.
- Kliknite na tlačidlo, ktoré ste pridali na panel s nástrojmi Rýchly prístup.
- Z vlastnej položky, ktorú ste pridali na pás s nástrojmi.
- Keď dôjde k udalosti. Tieto udalosti zahŕňajú otvorenie zošita, zatvorenie zošita, uloženie zošita, vykonanie zmeny v bunke, aktiváciu hárka a ďalšie veci.
- Z okna Immediate vo VBE. Stačí zadať názov procedúry Sub a stlačiť Enter.
Niektoré z týchto techník sú uvedené nižšie. Ak chcete pokračovať, musíte zadať procedúru Sub v module VBA:
Začnite s novým pracovným zošitom.
Stlačením Alt+F11 aktivujte VBE.
Vyberte zošit v okne Projekt.
Vyberte Vložiť → Modul na vloženie nového modulu.
Do modulu zadajte nasledovné:
Sub ShowCubeRoot()
Num = InputBox("Zadajte kladné číslo")
MsgBox Num ^ (1/3) & "je odmocnina kocky."
End Sub
Tento postup vyžaduje od používateľa číslo a potom zobrazí odmocninu kocky tohto čísla v okne so správou. Tieto obrázky ukazujú, čo sa stane, keď vykonáte tento postup.
Pomocou vstavanej funkcie VBA InputBox získate číslo.
Tu nájdete aj to, čo sa deje prostredníctvom funkcie MsgBox.
Zobrazenie odmocniny čísla prostredníctvom funkcie MsgBox.
Mimochodom, ShowCubeRoot nie je príkladom dobrého makra. Nekontroluje chyby, takže ľahko zlyhá. Skúste kliknúť na tlačidlo Zrušiť vo vstupnom poli alebo zadajte záporné číslo. Každá akcia má za následok chybové hlásenie.
Priame spustenie procedúry Excel VBA Sub
Jedným zo spôsobov, ako vykonať tento postup, je vykonať to priamo z modulu VBA, v ktorom ste ho definovali. Nasleduj tieto kroky:
Aktivujte VBE a vyberte modul VBA, ktorý obsahuje procedúru.
Presuňte kurzor kdekoľvek v kóde procedúry.
Stlačte F5 (alebo vyberte Spustiť → Spustiť pod/UserForm).
Odpovedzte na vstupné pole a kliknite na tlačidlo OK.
Postup zobrazí odmocninu zadaného čísla.
Nemôžete použiť Run → Run Sub/UserForm na spustenie procedúry Sub, ktorá používa argumenty, pretože nemáte žiadny spôsob, ako odovzdať argumenty procedúre. Ak procedúra obsahuje jeden alebo viac argumentov, jediný spôsob, ako ju spustiť, je zavolať ju z inej procedúry, ktorá musí poskytnúť argument(y).
Spustenie procedúry z dialógového okna Makro v Exceli
Väčšinu času spúšťate procedúry Sub z Excelu, nie z VBE. Nasledujúce kroky popisujú, ako spustiť makro pomocou dialógového okna Makro v Exceli:
Ak pracujete vo VBE, aktivujte si Excel.
Stlačenie Alt+F11 je expresná cesta.
Vyberte Vývojár → Kód → Makrá (alebo stlačte Alt+F8).
Excel zobrazí dialógové okno zobrazené tu.
V dialógovom okne Makro sú uvedené všetky dostupné procedúry Sub.
Vyberte makro.
Kliknite na položku Spustiť (alebo dvakrát kliknite na názov makra v zozname).
V dialógovom okne Makro sa nezobrazujú postupy Sub, ktoré používajú argumenty. Je to preto, že neexistuje spôsob, ako špecifikovať argumenty.
Spustenie makra Excel VBA pomocou klávesovej skratky
Ďalším spôsobom spustenia makra je stlačenie jeho klávesovej skratky. Pred použitím tejto metódy však musíte makru priradiť klávesovú skratku.
Keď začnete zaznamenávať makro, máte možnosť priradiť klávesovú skratku v dialógovom okne Záznam makra . Ak vytvoríte procedúru bez použitia záznamníka makier, môžete priradiť klávesovú skratku (alebo zmeniť existujúcu klávesovú skratku) pomocou nasledujúcich krokov:
Vyberte Vývojár → Kód → Makrá.
Zo zoznamu vyberte názov podprocedúry.
V tomto príklade má procedúra názov ShowCubeRoot.
Kliknite na tlačidlo Možnosti.
Excel zobrazí dialógové okno Možnosti makra zobrazené tu.
Dialógové okno Možnosti makra vám umožňuje nastaviť možnosti pre vaše makrá.
Kliknite na možnosť Klávesová skratka a zadajte písmeno do poľa označeného Ctrl.
Písmeno, ktoré zadáte, zodpovedá kombinácii klávesov, ktoré chcete použiť na vykonanie makra. Napríklad, ak zadáte malé písmeno c, makro môžete spustiť stlačením Ctrl+C. Ak zadáte veľké písmeno, musíte do kombinácie kláves pridať kláves Shift. Ak napríklad zadáte C, makro môžete spustiť stlačením Ctrl+Shift+C.
Kliknutím na tlačidlo OK zatvorte dialógové okno Možnosti makra a potom kliknutím na tlačidlo Zrušiť zatvorte dialógové okno Makro.
Po priradení klávesovej skratky môžete stlačením tejto kombinácie kláves spustiť makro. Klávesová skratka nefunguje, ak je priradená k makru, ktoré používa argument.
Klávesové skratky, ktoré priradíte makrám, prepíšu vstavané klávesové skratky Excelu. Napríklad Ctrl+C je štandardná klávesová skratka na kopírovanie údajov. Ak makru priradíte Ctrl+C, nemôžete použiť Ctrl+C na kopírovanie. Zvyčajne to nie je veľký problém, pretože Excel takmer vždy poskytuje iné spôsoby vykonávania príkazov.
Spustenie procedúry Excel VBA z tlačidla alebo tvaru
Niekedy sa vám môže páčiť myšlienka priradenia makra k tlačidlu (alebo akémukoľvek inému tvaru) na pracovnom hárku. Ak chcete priradiť makro Excel k tlačidlu, postupujte takto:
Aktivujte pracovný hárok.
Pridajte tlačidlo zo skupiny Ovládacie prvky formulára.
Ak chcete zobraziť skupinu Ovládacie prvky formulára, vyberte Vývojár → Ovládacie prvky → Vložiť.
Pás s nástrojmi zobrazujúci ovládacie prvky dostupné po kliknutí na položku Vložiť na karte Vývojár.
Kliknite na nástroj Tlačidlo v skupine Ovládacie prvky formulára.
Je to prvé tlačidlo v prvom rade ovládacích prvkov.
Potiahnutím v pracovnom hárku vytvorte tlačidlo.
Po pridaní tlačidla do pracovného hárka Excel prečíta vašu myseľ a zobrazí dialógové okno Priradiť makro zobrazené nižšie.
Keď pridáte tlačidlo do pracovného hárka, Excel automaticky zobrazí dialógové okno Priradiť makro.
Vyberte makro, ktoré chcete priradiť tlačidlu.
Kliknite na tlačidlo OK.
Po vykonaní úlohy kliknutím na tlačidlo spustíte makro – rovnako ako mágiu.
Keď pridáte tlačidlo, všimnite si, že rozbaľovacie pole zobrazuje dve sady ovládacích prvkov: ovládacie prvky formulára a ovládacie prvky ActiveX. Tieto dve skupiny ovládacích prvkov vyzerajú podobne, ale v skutočnosti sú veľmi odlišné. V praxi sú ovládacie prvky formulára jednoduchšie na používanie.
Makro môžete priradiť aj akémukoľvek inému tvaru alebo objektu. Predpokladajme napríklad, že chcete spustiť makro, keď používateľ klikne na objekt Obdĺžnik. Nasleduj tieto kroky:
Pridajte obdĺžnik do pracovného hárka.
Vložte obdĺžnik výberom Vložiť → Ilustrácie → Tvary.
Kliknite pravým tlačidlom myši na obdĺžnik.
V ponuke skratiek vyberte položku Priradiť makro.
Vyberte makro v dialógovom okne Priradiť makro.
Kliknite na tlačidlo OK.
Po vykonaní týchto krokov sa kliknutím na obdĺžnik spustí priradené makro.
Spustenie procedúry z inej procedúry Excel VBA
Procedúru Excel VBA môžete spustiť aj z inej procedúry. Ak to chcete vyskúšať, postupujte podľa týchto krokov:
Aktivujte modul VBA, ktorý obsahuje rutinu ShowCubeRoot.
Zadajte tento nový postup (buď nad alebo pod kódom ShowCubeRoot – nezáleží na tom):
Sub NewSub()
Zavolajte ShowCubeRoot
End Sub
Po dokončení jednoducho spustíte makro NewSub.
Najjednoduchší spôsob, ako to urobiť, je presunúť kurzor kdekoľvek v rámci kódu NewSub a stlačiť F5. Všimnite si, že táto procedúra NewSub jednoducho spustí procedúru ShowCubeRoot.
Mimochodom, kľúčové slovo Call je voliteľné. Príkaz môže pozostávať iba z názvu procedúry Sub. Použitím kľúčového slova Call je však úplne jasné, že sa volá procedúra.
Vykonávanie procedúr funkcie Excel VBA Function
Funkcie, na rozdiel od procedúr Sub, možno vykonávať iba dvoma spôsobmi:
- Volaním funkcie z inej procedúry Sub alebo procedúry Function
- Pomocou funkcie vo vzorci pracovného hárka
Vyskúšajte túto jednoduchú funkciu. Zadajte ho do modulu VBA:
Funkcia CubeRoot(číslo)
CubeRoot = číslo ^ (1/3)
End Function
Táto funkcia je dosť slabá; vypočítava iba odmocninu čísla, ktoré mu bolo odovzdané ako argument. Poskytuje však východiskový bod pre pochopenie funkcií. Tiež ilustruje dôležitý koncept funkcií: ako vrátiť hodnotu. (Pamätáš si, že funkcia vracia hodnotu, však?)
Všimnite si, že jediný riadok kódu, ktorý tvorí túto procedúru funkcie, vykonáva výpočet. Výsledok matematiky (číslo s mocninou 1⁄3) je priradený k premennej CubeRoot. Nie náhodou CubeRoot je aj názov funkcie. Ak chcete funkcii povedať, akú hodnotu má vrátiť, priradíte túto hodnotu názvu funkcie.
Volanie funkcie Excel VBA z procedúry Sub
Pretože funkciu nemôžete vykonať priamo, musíte ju zavolať z inej procedúry. Zadajte nasledujúci jednoduchý postup v rovnakom module VBA, ktorý obsahuje funkciu CubeRoot:
Sub CallerSub()
Ans = CubeRoot(125)
MsgBox Ans
End Sub
Keď spustíte procedúru CallerSub, Excel zobrazí okno s hlásením, ktoré obsahuje hodnotu premennej Ans, ktorá je 5.
Tu je to, čo sa deje: Funkcia CubeRoot sa vykoná a dostane argument 125. Výpočet vykoná kód funkcie (pomocou hodnoty odovzdanej ako argument) a vrátená hodnota funkcie sa priradí premennej Ans. Funkcia MsgBox potom zobrazí hodnotu premennej Ans.
Skúste zmeniť argument, ktorý je odovzdaný funkcii CubeRoot a znova spustite makro CallerSub. Funguje to tak, ako by malo – za predpokladu, že funkcii dáte platný argument (kladné číslo).
Mimochodom, postup CallerSub by sa dal trochu zjednodušiť. Premenná Ans nie je skutočne potrebná, pokiaľ váš kód túto premennú nepoužije neskôr. Na získanie rovnakého výsledku môžete použiť tento jediný príkaz:
MsgBox CubeRoot(125)
Volanie funkcie Excel VBA zo vzorca pracovného hárka
Teraz je čas zavolať túto procedúru funkcie VBA zo vzorca pracovného hárka. Aktivujte pracovný hárok v rovnakom zošite, ktorý obsahuje definíciu funkcie CubeRoot. Potom do ľubovoľnej bunky zadajte nasledujúci vzorec:
=CubeRoot(1728)
Bunka zobrazuje 12, čo je skutočne odmocnina z 1 728.
Ako sa dalo očakávať, ako argument funkcie CubeRoot môžete použiť odkaz na bunku. Ak napríklad bunka A1 obsahuje hodnotu, môžete zadať =CubeRoot(A1) . V tomto prípade funkcia vráti číslo získané výpočtom tretej odmocniny hodnoty v A1.
Túto funkciu môžete v pracovnom hárku použiť ľubovoľný počet krát. Podobne ako vstavané funkcie Excelu, aj vaše vlastné funkcie sa zobrazia v dialógovom okne Vložiť funkciu. Kliknite na tlačidlo panela nástrojov Vložiť funkciu a vyberte kategóriu Definované používateľom. Ako je uvedené nižšie, v dialógovom okne Vložiť funkciu je uvedená vaša vlastná funkcia.
Funkcia CubeRoot sa zobrazí v kategórii Definované používateľom v dialógovom okne Vložiť funkciu.
Ak chcete, aby sa v dialógovom okne Vložiť funkciu zobrazil popis funkcie, postupujte takto:
Vyberte Vývojár → Kód → Makrá.
Excel zobrazí dialógové okno Makro, ale CubeRoot sa v zozname nezobrazí. (CubeRoot je procedúra Function a tento zoznam zobrazuje iba procedúry Sub.) Netrápte sa.
Do poľa Názov makra zadajte slovo CubeRoot.
Kliknite na tlačidlo Možnosti.
Do poľa Popis zadajte popis funkcie.
Kliknutím na tlačidlo OK zatvorte dialógové okno Možnosti makra.
Zatvorte dialógové okno Makro kliknutím na tlačidlo Zrušiť.
Tento popisný text sa teraz zobrazuje v dialógovom okne Vložiť funkciu.
Tento obrázok zobrazuje funkciu CubeRoot používanú vo vzorcoch pracovného hárka.
Použitie funkcie CubeRoot vo vzorcoch.
Už sa vám to možno začína dať dokopy.