Upozornění pro čtenáře a uživatele této knihy
Všechna práva vyhrazena. Žádná část této tištěné či elektronické knihy nesmí být reprodukována ani šířena v papírové, elektronické či jiné podobě bez předchozího písemného souhlasu nakladatele. Neoprávněné užití této knihy bude trestně stíháno.

Marek Laurenčík, Michal Bureš

Programování v Excelu 2019
záznam, úprava a programování maker

Vydala Grada Publishing, a.s.
U Průhonu 22, Praha 7
obchod@grada.cz, www.grada.cz
tel.: +420 234 264 401
jako svou 8265. publikaci

Odpovědný redaktor Petr Somogyi
Sazba Petr Somogyi
Formát ePub Štěpán Böhm
Počet stran 240
První vydání, Praha 2021
Vytiskla TISKÁRNA V RÁJI, s.r.o., Pardubice

© Grada Publishing, a.s., 2021
Cover Design © Grada Publishing, a. s., 2021
Cover Photo © Depositphotos/riariu, vectorfusionart

Názvy produktů, firem apod. použité v knize mohou být ochrannými známkami
nebo registrovanými ochrannými známkami příslušných vlastníků.

ISBN 978-80-271-4572-0 (ePub)
ISBN 978-80-271-4571-3 (pdf)
ISBN 978-80-271-3145-7 (print)

Úvod

Tato kniha je věnována programování v tabulkovém kalkulátoru MS Excel 2019 pomocí jazyka Visual Basic for Applications. U čtenáře nepředpokládáme žádné předběžné znalosti programování, pouze znalost práce s kalkulátorem Excel na uživatelské úrovni.

V knize popisované programovací postupy jsou použitelné i v předchozích verzích Excelu (tedy 2016, popřípadě 2013). Excel 2019 však ve srovnání se staršími verzemi používá odlišný přístup při připojování vnějších dat z relačních databází, jako je MS Access a MS SQL Server. Tento rozdíl se projevuje i při programování a je v knize podrobně rozebraný.

Text knihy nevznikl pouhým doplněním předchozích vydání, ale provedli jsme důkladné přepracování celého textu, zejména se zaměřením na praktickou použitelnost popisovaných programovacích postupů. Přitom jsme vycházeli z vlastních zkušeností při školení na kurzech jazyka VBA a z řady na zakázku vytvořených projektů.

Kromě kapitoly 1, která popisuje tvorbu maker záznamem a různé způsoby jejich spouštění, je možné rozdělit ostatní kapitoly knihy do několika částí. Kapitoly 2 a 3 popisují jazyk Visual Basic. Poznatky, které budou uvedené v těchto kapitolách, můžete využít i u jiných produktů skupiny MS Office, především u MS Accessu. Kapitoly 4 až 8 jsou věnovány základním možnostem a postupům při použití jazyka VBA v Excelu. Kapitoly 8 až 15 rozebírají pokročilé a speciální postupy, které zahrnují programování grafů, kontingenčních tabulek včetně datového modelu, analýzu a kontrolu dat, práci s výstupy včetně exportu do formátu PDF a práce s formátovanými tabulkami. Značná pozornost je věnována programovacím postupům pro práci s vnějšími daty, tj. s textovými soubory a soubory ve formátu XML, a postupům při tvorbě tabulek připojených k relačním databázím MS Access a MS SQL Server. V kapitole 16 a 17 naleznete popis práce s uživatelskými formuláři (což jsou vlastní dialogová okna), a to jak uživatelským způsobem, tak i ve spojení s programovým kódem. Použití uživatelských formulářů představuje výrazné rozšíření možností Excelu.

Text knihy doplňují poslední tři kapitoly: Kapitola 18 popisuje propojení Excelu s dalšími produkty MS Office (Word, Access a Outlook). Kapitola 19 je věnována úpravě sešitu na samostatnou aplikaci, kterou mohou používat jiní uživatelé a která obsahuje vlastní ovládací prvky, a to buď ve formě sešitu, nebo vlastního doplňku. Poslední kapitola je věnovaná třídám a představuje určitý úvod do programování na vyšší úrovni. I u tohoto tématu však jistě najdete zajímavá praktická využití.

Domníváme se, že tato osnova knihy pokryje převážnou většinu toho, co budete od programování v Excelu očekávat. Důležitou součástí knihy jsou praktické příklady. Ke každé kapitole (s výjimkou první) náleží sešit s ukázkovými makry, funkcemi a formuláři. Tyto sešity jsou ve formátu Excel 2019 (XLSM). V několika případech se jedná o samostatnou složku s více soubory. Odkazy na jednotlivé příklady naleznete v jednotlivých kapitolách. Vlastní kód VBA je v sešitech podrobně okomentován, aby byl snadno srozumitelný a mohl sloužit jako zdroj inspirace při vytváření vlastního kódu. Příklady si můžete stáhnout z webových stránek nakladatelství Grada (www.grada.cz) v příslušné sekci této knihy.

V knize jsou použity následující typografické prvky:

■Příkazy jazyka VBA jsou odlišeny neproporcionálním písmem.

■Položky v nabídkách Excelu a editoru jazyka VBA, názvy karet, souborů a složek jsou zvýrazněny tučným písmem.

■Klávesové zkratky jsou vysazeny KAPITÁLKAMI.

■Názvy souborů a internetové adresy jsou označeny kurzivou.

■Soubory s příklady k jednotlivým kapitolám jsou zvýrazněny tučnou kurzivou.

Ať se vám při práci s Excelem a jazykem VBA daří!

Autoři

1Tvorba maker záznamem

Co se v této kapitole naučíte:

■zaznamenání makra,

■absolutní a relativní odkaz v makru,

■různé způsoby spuštění maker,

■využití maker z jiného sešitu.

1.1Použití maker v Excelu

Při rutinní práci s Excelem se často stává, že je zapotřebí několikrát za sebou opakovat série několika operací. Sešit Excelu je schopen zaznamenat řadu akcí po sobě, uložit je pod zvoleným názvem a podle potřeby tyto akce kdykoliv zopakovat. Takový záznam se označuje jako makro. Použití maker vám při práci s Excelem ušetří spoustu práce a zabrání zbytečným chybám.

Excel (podobně jako další aplikace z balíku MS Office) je vybaven programovacím jazykem Visual Basic for Application (VBA) a při záznamu makra se jednotlivé akce zaznamenají právě pomocí příkazů zapsaných v tomto jazyku. Editor jazyka VBA je součástí instalace kompletu MS Office. Z toho plyne, že makro můžete vytvořit dvojím způsobem:

■Uživatelsky: v sešitu zapnete zvláštní režim, který všechny provedené akce pomocí kódu v jazyku VBA zaznamená a tento kód uloží jako součást sešitu.

■Programátorsky: zobrazíte si editor jazyka VBA, ve kterém zapíšete potřebný kód.

Je možné používat i kombinaci obou způsobů – zaznamenat makro uživatelsky a později jej pozměnit úpravou vytvořeného kódu.

Při uživatelském přístupu může makro obsahovat pouze akce, které jste schopni provádět běžným způsobem. Programátorský přístup poskytuje další možnosti:

■využívat ke zpracování údajů v sešitu způsob, který při běžné práci nelze použít,

■pracovat se složkami a soubory,

■vytvářet nové vlastní funkce,

■spouštět automatické akce při otevření a zavření sešitu,

■vytvářet vlastní dialogová okna pro zadávání vstupních údajů.

V této kapitole se seznámíte s uživatelským způsobem tvorby pomocí záznamu maker. Tvorba kódu v jazyku VBA je předmětem dalších kapitol.

Pro práci s makry je potřebná karta Vývojář. Pokud karta není zobrazena, zobrazíte ji takto:

1.Klepnete na kartu Soubor.

2.Vpravo dole klepnete na položku Možnosti. Zobrazíte tím okno pro nastavení programu.

3.V levé části okna klepnete na položku Přizpůsobit pás karet.

4.V pravém seznamu označíte volbu Vývojář a potvrdíte tlačítkem OK.

Obrázek 1.1 Zobrazení karty Vývojář

Toto nastavení Excelu je trvalé a při příštím spuštění již bude karta Vývojář zobrazena.

Jazyk VBA se v jednotlivých verzích Excelu neliší. Proto makro, které bylo zaznamenané v nižší verzi Excelu, bude bez problémů fungovat i ve verzích vyšších. Nemusí to však platit obráceně, a to ani u některých akcí, které je možné používat v nižší i vyšší verzi Excelu. Některé funkce Excelu mají ve vyšších verzích více možností, kód VBA je u vyšší verze vytvořen jiným způsobem a ve verzi nižší nebude fungovat. Jedná se například o řazení tabulky a podmíněné formátování.

1.2Záznam a spuštění makra

Pro práci s makry jsou určena tlačítka, která naleznete na kartě Vývojář vlevo ve skupině Kód. Na kartě Zobrazit je rovněž k dispozici tlačítko Makra, které umožňuje záznam a spuštění makra, práce s kartou Vývojář je však přehlednější.

Obrázek 1.2 Karta Vývojář

Pro záznam makra použijete tento postup:

1.Přejdete na kartu Vývojář.

2.Pomocí tlačítka Relativní odkazy určíte, jak se má v makru zaznamenat výběr buněk, tedy pohyb kurzoru. Jestliže toto tlačítko stisknete, pohyb kurzoru se zaznamená relativně vůči výchozí buňce. Pokud jej ponecháte vypnuté, zaznamená se pevná adresa buňky, na kterou se kurzor během záznamu přemístil.

3.Klepnete na tlačítko Záznam makra. Nápis na tlačítku se změní na Zastavit záznam.

4.V zobrazeném okně vyplníte textové pole Název makra. V názvu používejte písmena, číslice nebo podtržítko. Jiné znaky (mezera, čárka, pomlčka atd.) nejsou přípustné.

5.V seznamu Uložit makro do vyberete, kam se má vytvářené makro zapsat (viz dále).

6.Potvrdíte tlačítkem OK. Tím se spustí záznam makra.

7.Provedete jednotlivé kroky, které má makro obsahovat.

8.Klepnete na tlačítko Zastavit záznam. Tím se záznam makra ukončí a obnoví se normální režim práce se sešitem.

Název makra nesmí kolidovat s adresou buňky, například vytvořit makro s názvem AA1 není možné. U názvů buněk, oblastí, listů a standardních funkcí Excelu tato kolize nenastává, ale toto pojmenování makra rozhodně nelze doporučit.

Obrázek 1.3 Vypnutý a zapnutý relativní záznam makra

Akce, které jsou zaznamenávané při tvorbě makra, zpravidla zahrnují i pohyb kurzoru a budou se používat u různých buněk. Při tvorbě většiny maker je proto nutné zapnout relativní záznam. Tlačítko Relativní odkazy je však po spuštění Excelu vypnuté a musíte jej stisknout před zahájením vlastního záznamu.

Obrázek 1.4 Okno pro záznam makra

Při záznamu makra se uloží všechny akce prováděné Excelem (tedy i chyby, kroky zpět a automatické uložení). Proto je vhodné před spuštěním záznamu sešit uložit.

Během vlastního záznamu většinou nezáleží na tom, jak určitou akci provedete. Můžete použít tlačítko na kartě, místní nabídku, nebo klávesovou zkratku. Výjimkou je nastavení písma: jestliže pro nastavení některého atributu písma použijete tlačítko nebo klávesovou zkratku, do makra se zaznamená pouze toto nastavení (například změna písma na tučné). Pokud ale nastavíte písmo pomocí dialogového okna, do makra se uloží všechna nastavení, tedy i font, velikost, barva atd. – bez ohledu na to, jestli se jedná o hodnoty výchozí, nebo upravené.

1.2.1Uložení a vyzkoušení makra

Před spuštěním vlastního záznamu makra můžete v seznamu Uložit makro do vybrat tři možnosti, kam se bude vytvářené makro ukládat:

■Volba Tento sešit (výchozí): makro se ukládá do stejného sešitu, ve kterém byly zaznamenávané akce prováděny.

■Volba Nový sešit: založí se nový prázdný sešit, do kterého se makro uloží.

■Volba Osobní sešit maker: založí se speciální sešit s název Personal.xlsb, do kterého se vytvářené makro uloží. Pokud tento sešit již existuje, vytvářené makro se do sešitu přidá.

Sešit Personal.xlsb se při každém dalším spuštění Excelu automaticky otevře jako skrytý. Vede to k tomu, že všechna makra uložená v tomto sešitu jsou po spuštění Excelu vždy přístupná.

Uložení makra v sešitu Personal.xlsb (a tedy jeho zpřístupnění ve všech otevřených sešitech) může vést k nechtěnému spuštění makra. Pokud vytvářené makro uložíte do tohoto sešitu a nechcete, aby bylo všude přístupné, jedinou možností je sešit Personal.xlsb vymazat.

Pro vyzkoušení makra klepnete na tlačítko Makra na kartě Vývojář, v zobrazeném okně označíte vytvořené makro a klepnete na tlačítko Spustit. Po ukončení běhu makra je tlačítko Zpět (umístěné na panelu Rychlý přístup) znepřístupněno. To znamená, že akce provedené makrem jsou vždy NEVRATNÉ!

Obrázek 1.5 Okno se seznamem maker

1.2.2Uložení a otevření sešitu s makrem

Současné verze Excelu (konkrétně Excel 2007 a výše) rozlišují dva typy sešitů: obyčejné sešity (přípona XLSX) a sešity s podporou maker (přípona XLSM). Sešit se zaznamenaným makrem proto musíte uložit ve formátu XLSM (v dialogovém okně pro uložení sešitu použijete seznam Uložit jako typ). Při pokusu o uložení sešitu s makrem běžným způsobem se zobrazí varovné hlášení. Platí to pro nově vytvořený sešit i pro sešit s příponou XLSX, ve kterém chcete dodatečně vytvořit makro.

Jestliže se pokusíte uložit sešit se zaznamenaným makrem ve formátu XLSX a přes varovné hlášení v ukládání pokračujete, sešit se uloží, avšak zaznamenané makro se ze sešitu odstraní.

Při otevření sešitu s makrem se nad řádkem vzorců zobrazí výstražné hlášení s tlačítkem Povolit obsah. Po klepnutí na tlačítko se sešit otevře. Toto povolení se ukládá spolu se sešitem, takže při jeho dalším otevření se již hlášení nezobrazí a sešit se ihned otevře. Jestliže však sešit přejmenujete nebo jej přesunete do jiného umístění, výstražné hlášení se objeví znovu.

Obrázek 1.6 Povolení maker v sešitu

1.2.3Odstranění makra ze sešitu

Nepotřebná nebo chybně pracující makra je záhodno ze sešitu odstranit, aby nedošlo k jejich nechtěnému spuštění. Klepnutím na tlačítko Makra zobrazíte seznam maker, v seznamu příslušné makro označíte a použijete tlačítko Odstranit. Akce je jištěna zpětným dotazem a je nevratná.

V dialogovém okně pro seznam maker je k dispozici také tlačítko Upravit. Toto tlačítko však neumožní opakovat záznam makra, ale zobrazí jeho kód zapsaný v jazyce Visual Basic. Jestliže tedy potřebujete makro upravit, ale nechcete pracovat přímo s jeho kódem, nezbude vám nic jiného než makro odstranit a zaznamenat jej znovu.

1.3Různé způsoby spuštění makra

Spuštění makra pomocí seznamu maker se dobře hodí pro jeho testování, ale není příliš pohodlné pro rutinní práci. Excel proto nabízí několik dalších způsobů, jak makra spouštět:

■klávesovou zkratku,

■tlačítko na panelu Rychlý přístup,

■tlačítko na některé z ovládacích karet,

■tlačítko na listu.

1.3.1Spuštění makra klávesovou zkratkou

Přiřazení klávesové zkratky makru je možné už při záznamu makra, nebo dodatečně:

1.Tlačítkem Makra na kartě Vývojář zobrazíte seznam maker a v něm označíte potřebné makro.

2.Stisknete tlačítko Možnosti.

3.Do položky Klávesová zkratka zapíšete písmeno, které spolu s klávesou CTRL bude tvořit klávesovou zkratku.

4.Potvrdíte tlačítkem OK.

Obrázek 1.7 Přiřazení klávesové zkratky makru

V klávesových zkratkách se rozlišují malá a velká písmena. Jestliže do položky Klávesová zkratka zapíšete malé písmeno, klávesovou zkratkou bude klávesa CTRL spolu s písmenem. Pokud zapíšete velké písmeno, klávesovou zkratkou bude kombinace CTRL+SHIFT+PÍSMENO.

Obrázek 1.8 Úprava panelu Rychlý přístup

Pro klávesovou zkratku je třeba zvolit písmeno, které není použito ve standardních klávesových zkratkách Excelu. Pokud to provedete, klávesová zkratka se předefinuje, tedy neprovede standardní akci Excelu, ale spustí makro. Toto je ovšem problém, protože standardní klávesové zkratky již vyčerpaly prakticky celou abecedu. Klávesová zkratka CTRL+Q, která spolehlivě fungovala v dřívějších verzích Excelu, není od verze 2013 již použitelná, protože je rezervována pro rychlou analýzu dat. Řešením je použití velkých písmen, protože standardní klávesové zkratky Excelu používají vesměs malá písmena.

V seznamu maker nejsou přiřazené klávesové zkratky zobrazeny, pro jejich zjištění musíte použít tlačítko Možnosti.

Jestliže se pokusíte přiřadit tutéž klávesovou zkratku dvěma různým makrům v jednom sešitu, Excel nezobrazí žádné upozornění a duplicitní přiřazení provede. Při jejím použití se pak spustí makro, jehož název je v abecedě „menší“ (nikoliv makro, které bylo vytvořeno dříve).

1.3.2Tlačítko na panelu Rychlý přístup

Přidání tlačítka pro spouštění makra na panel Rychlý přístup provedete následujícím způsobem:

1.Klepnete na kartu Soubor a vpravo dole použijete položku Možnosti.

2.V levé části zobrazeného okna klepnete na položku Panel nástrojů Rychlý přístup.

3.V seznamu Zvolit příkazy nastavíte položku Makra.

4.Označíte makro a klepnete na tlačítko Přidat.

5.V rozevíracím seznamu v pravé horní části okna Přizpůsobit panel nástrojů Rychlý přístup nastavíte, kde bude vytvořené tlačítko zobrazeno.

6.Potvrdíte tlačítkem OK.

U vytvářeného tlačítka můžete také změnit ikonu a upravit text bublinové nápovědy, která se u tlačítka zobrazí. Před uzavřením okna pro úpravu panelu Rychlý přístup označíte v pravém seznamu přidané makro a klepnete na tlačítko Změnit. V dalším zobrazeném okně vyberete vhodnou ikonu, podle potřeby upravíte zobrazovaný text a potvrdíte tlačítkem OK.

Obrázek 1.9 Změna ikony a textu u tlačítka

V rozevíracím seznamu v pravé horní části okna Přizpůsobit panel nástrojů Rychlý přístup je možné použít dvě volby:

■Jako výchozí je nastavena volba Pro všechny dokumenty (výchozí). Při této volbě se tlačítko na panelu Rychlý přístup zobrazí vždy, i když sešit s makrem není otevřen. V takovémto případě se sešit s makrem automaticky otevře a makro se spustí (pokud sešit s makrem nebyl přejmenován nebo přesunut do jiného umístění).

■Volba Pro dokument + název otevřeného souboru způsobí, že se přidané tlačítko zobrazí jen v souboru s vytvořeným makrem.

Podle toho, jakou možnost zvolíte, se v dlouhém seznamu vpravo zobrazí buď tlačítka dostupná všude, nebo tlačítka dostupná jen v otevřeném sešitu. Totéž se uplatní i u odstranění tlačítka z panelu Rychlý přístup, což provedete tlačítkem Odebrat. V rozevíracím seznamu vpravo nahoře je třeba nastavit odpovídající volbu.

1.3.3Přidání tlačítka na kartu

Tlačítko pro spuštění makra můžete také přidat na některou z karet, nebo si vytvořit kartu vlastní. Postupujte takto:

1.Klepnete na kartu Soubor a vpravo dole použijete položku Možnosti.

2.V levé části zobrazeného okna klepnete na položku Přizpůsobit pás karet.

3.Klepnete na tlačítko Nová karta. Tím se v pravém seznamu vytvoří nová karta a v ní nová skupina.

4.Označíte postupně novou kartu a novou skupinu a pomocí tlačítka Přejmenovat zadáte vhodné názvy.

5.Označíte novou skupinu. V rozevíracím seznamu Zvolit příkazy nastavíte volbu Makra a tlačítkem Přidat zařadíte do skupiny nové tlačítko.

Obrázek 1.10 Přidání tlačítka na kartu

6.Vytvořené tlačítko označíte a klepnete na tlačítko Přejmenovat. Vyberete ikonu a změníte název tlačítka.

7.Polohu nové karty můžete upravit pomocí tlačítek se šipkami nahoru a dolů.

8.Potvrdíte tlačítkem OK.

Jestliže označíte některou ze standardních karet a použijete tlačítko Nová skupina, do karty se zařadí nová prázdná skupina. Do této skupiny je možné přidávat popsaným způsobem nová tlačítka. U standardních skupin to možné není.

Při přidávání tlačítek do některého pásu karet není možné zvolit umístění vytvořeného tlačítka. Tlačítko se vždy zobrazí v jakémkoliv souboru. Při klepnutí na tlačítko je reakce stejná jako u tlačítka na panelu Rychlý přístup, tedy sešit s makrem nemusí být otevřený a při použití tlačítka se automaticky otevře.

1.3.4Přidání tlačítka na list

Tlačítko pro spouštění makra můžete také vložit na některý z listů. Postup je následující:

1.Na kartě Vývojář klepnete na šipku u tlačítka Vložit. Zobrazí se nabídka ovládacích prvků, které je možné na listu vytvářet.

2.V nabídce klepnete na tlačítko umístěné v první řadě zcela vlevo (bublina „Tlačítko (ovládací prvek formuláře)“.

3.V listu klepnete na místo, kde má být tlačítko umístěno.

4.Po klepnutí se zobrazí okno se seznamem maker. Označíte potřebné makro a klepnete na tlačítko OK.

Obrázek 1.11 Nabídka pro vytvoření prvku na listu

Na vytvořené tlačítko klepnete pravým tlačítkem myší, z místní nabídky použijete položku Upravit text a přepíšete nápis na tlačítku. Jestliže na tlačítko klepnete pravým tlačítkem myši a poté použijete klávesu ESC, tlačítko zůstane ohraničeno úchyty (obdobně, jako je označen obrázek). U označeného tlačítka je možné měnit jeho velikost tahem za úchyty, měnit jeho polohu (myší nebo klávesovými šipkami) a na kartě Domů nastavit tučné písmo nebo kurzívu. Tlačítko pro nastavení barvy písma je nedostupné. Můžete však na tlačítko klepnout pravým tlačítkem myši, z místní nabídky vybrat příkaz Formát ovládacího prvku a nastavit potřebnou změnu na kartě Písmo. Klávesou DELETE se označené tlačítko z listu odstraní.

1.4Spuštění makra v jiném sešitu

Makro, které je vytvořené v nějakém sešitu, je možné spustit v libovolném jiném sešitu. Podmínkou je, aby byly oba sešity otevřené. Makro lze tímto způsobem využít i v sešitu bez podpory maker (přípona XLSX). Ke spuštění můžete použít seznam maker (před názvem makra je v tomto případě zobrazen ještě název sešitu, oddělený vykřičníkem), klávesovou zkratku, tlačítko na panelu Rychlý přístup nebo tlačítko na některé z karet. Tímto způsobem také funguje zmíněný sešit Personal.xslb, který je otevřen automaticky jako skrytý.

Pokud sešit s makrem otevřen není, seznam maker se zobrazí jako prázdný a nefunguje ani klávesová zkratka. Tlačítko na panelu Rychlý přístup a tlačítko na některé z karet, jež je určené ke spouštění makra, automaticky sešit s makrem otevřou a makro spustí. Sešit s makrem však nesmí být přejmenován nebo přesunut do jiného umístění.

2Základy jazyka VBA

Co se vtéto kapitole naučíte:

■práci seditorem VBA,

■vytvoření makra auživatelské funkce, jejich využití,

■přidání nápovědy kvytvořené funkci,

■práci sproměnnými atvorbu vzorců,

■větvení výpočtu na několik částí,

■použití cyklů.

Příklady ktéto kapitole naleznete vsešitu Zaklady_VBA.xlsm.

2.1Práce seditorem VBA

Záznamník maker vytváří kód vprogramovacím jazyku Visual Basic for Application (VBA). Vtomto jazyku můžete vytvářet také vlastní kódy tří typů:

■Procedury (Sub), které použijete stejně jako makra vytvořené záznamem.

■Uživatelské funkce (Function), které lze vkládat do buněk jako vzorce.

■Vlastnosti (Property), které se používají při tvorbě vlastních tříd.

Vtéto adalších kapitolách se seznámíte stvorbou maker afunkcí. Práce střídami je popsána vposlední kapitole knihy.

Do okna editoru VBA přejdete stisknutím tlačítka Visual Basic, které je umístěno na kartě Vývojář ve skupině Kód. Okno editoru VBA vytvoří na hlavním panelu samostatné tlačítko.1 Vokně editoru naleznete tři podokna:

■Podokno projektu (vlevo nahoře) obsahuje seznam listů vsešitu, položku ThisWorkbook (což představuje celý sešit), složku Modules, popřípadě složku Forms suživatelskými formuláři. Jestliže chcete zobrazit kód některého zmodulů, poklepejte na jeho název.

■Podokno vlastností Properties (vlevo dole) obsahuje umodulu pouze jeho název (Name). Hlavní použití tohoto podokna je při tvorbě formulářů.

■Okno programového modulu (vpravo) slouží kvlastnímu zápisu kódu.

Jestliže veditoru VBA není zobrazeno levé podokno projektu nebo podokno vlastností, zobrazíte je pomocí položek View | Project Explorer nebo View | Properties Window.

Aby bylo možné vsešitu vytvořit nějaký kód, musíte nejprve do sešitu vložit programový modul. Při tvorbě makra pomocí záznamu se programový modul vloží do sešitu automaticky, při tvorbě kódu zápisem jej musíte vložit sami spoužitím následujícího postupu:

Obrázek 2.1 Karta Vývojář

1.Klepnete na záložku karty Vývojář ana této kartě stisknete tlačítko Visual Basic. Tím zobrazíte okno editoru VBA.

2.Vhlavní nabídce tohoto okna použijete položku Insert | Module.

3.Klepnete do podokna Properties avlastnost Name přepíšete na vhodné pojmenování (výchozí je Module1).

4.Klepnete vpravo do podokna modulu. Tím je editor kódu připraven kpráci.

Obrázek 2.2 Okno editoru VBA

Při zápisu kódu postupujete obdobně jako při práci spoznámkovým blokem. Jednotlivé příkazy ukončíte klávesou ENTER. Prázdné řádky aodsazení od levého okraje (mezery, tabulátor) jsou ignorovány. Klávesové zkratky CTRL+C, CTRL+X aCTRL+Vmůžete použít ke zkopírování, vyjmutí avložení označeného textu.

Kód vjazyku VBA často obsahuje do sebe vnořené příkazy. Vnořené příkazy je výhodné odsadit více doprava pomocí mezer nebo tabulátoru. Jednotlivé části kódu můžete od sebe oddělit prázdným řádkem. Obojí usnadňuje orientaci ve vytvořeném kódu.

Při rozdělení příkazu na dva řádky ukončíte první část mezerou apodtržítkem, další řádek je pak chápán jako pokračování. Na druhé straně je možné na jeden řádek napsat ivíce příkazů aoddělit je dvojtečkou. Tedy řádek:

<příkaz1>: <příkaz2>

funguje stejně, jako dva řádky:

<příkaz1>

<příkaz2>

Řádky sapostrofem jsou komentáře apři provádění kódu se ignorují. Komentáře začínající apostrofem je také možné připsat za výkonný příkaz.

Editor VBA zobrazuje zapsaný kód pomocí čtyř barev:

■modrou barvou klíčová slova jazyku Visual Basic,

■černou barvou názvy maker, funkcí, proměnných aodkazy na prvky vsešitu (buňky, listy atd.),

■zelenou barvou komentáře,

■červenou barvou chybné řádky.

Obrázek 2.3 Barvy vkódu VBA

Při zápisu kódu je třeba pamatovat na to, že editor VBA není počeštěn. Musíte tomu tedy přizpůsobit zápis kódu:

■jako oddělovač desetinných míst používejte tečku (nikoliv čárku),

■jako oddělovač vseznamu používejte čárku (nikoliv středník).

Tato pravidla platí vanglické ičeské verzi Excelu.

Pro zobrazení okna nápovědy použijete položku Help | Microsoft Visual Basic for Applications Help. Jestliže chcete zobrazit konkrétní nápovědu pro některý zpříkazů jazyka VBA, označíte jej jako blok astisknete klávesu F1.

Obrázek 2.4 Vložení kódu do modulu

2.2Tvorba makra kódem VBA

Vložení kódu do modulu provedete těmito kroky:

1.Vokně editoru VBA klepnete do podokna modulu.

2.Použijete položku Insert | Procedure.

3.Vzobrazeném okně označíte typ vkládaného kódu (Sub – makro).

4.Zadáte název makra (Name).

5.Potvrdíte tlačítkem OK.

Tím se do modulu vloží první aposlední řádek kódu makra:

Public Sub Nazev_makra()

End Sub

Vjednom modulu lze vytvořit více maker nebo funkcí, jejich kód je oddělen vodorovnou čárou.

Mezi první aposlední řádek zapíšete vlastní výkonné příkazy. Při psaní kódu je vhodné dodržovat následující pravidla:

■Všechny příkazy pište malými písmeny. Pokud je příkaz zapsán správně, po opuštění zapisovaného řádku se počáteční písmena klíčových slov jazyku VBA změní na velká.

■Při tvorbě vnořených příkazů zapište nejprve začátek akonec ateprve potom vnořené řádky. Jedna znejčastějších chyb totiž je, že při psaní vnořených příkazů zapomenete na konec.

■Do kódu si hned zapisujte komentáře. Využívejte přitom možnosti psát komentář za příkaz do jednoho řádku.

■Pokud chcete některý příkaz vyřadit, je mnohdy výhodnější jej nemazat, ale zapsat před něj apostrof. Tím se zněho stane komentář. Odstraněním apostrofu se příkaz znovu aktivuje.

Pro všechny názvy veditoru VBA (moduly, makra, funkce, proměnné atd.) používejte pouze písmena bez české diakritiky, číslice nebo podtržítko. Nepoužívejte mezery adalší interpunkční znaky.

Pro názvy zapisovaných maker platí tato pravidla:

■Při tvorbě názvů se nerozlišují malá avelká písmena.

■Název může obsahovat českou diakritiku. Protože však editor VBA není počeštěn, bude lepší písmena sháčky ačárkami nepoužívat.

■Název makra lze vytvořit jako adresu buňky (například AA1), ale makro nebude možné spustit.

■Název makra musí být vrámci modulu jedinečný. Vjednom modulu nelze vytvořit makro ifunkci se stejným názvem.

■Je možné použít stejný název makra ve dvou různých modulech, těmto duplicitám je však lepší se vyhýbat.

Makro zpravidla pracuje sbuňkami: vnásledující kapitole se dozvíte, jak se na buňky odvolat. Jako příklad jednoduchého makra zatím postačí zpráva na obrazovku, která má tvar:

MsgBox "Text zprávy"

Příkaz MsgBox zobrazí okno stextem zprávy atlačítkem OK. Pomocí tohoto příkazu je možné zobrazovat ihodnotu nějaké proměnné:

promenna = 10

MsgBox promenna

Tuto možnost příkazu MsgBox využijete zejména při ladění maker.

Vytvořené makro spustíte stejně jako při tvorbě makra záznamem, například tlačítkem Makra na kartě Vývojář. Další možností je spuštění makra přímo zeditoru VBA: vložíte kurzor do kódu makra ana panelu nástrojů stisknete tlačítko Run sobrázkem zelené šipky. Po provedení makra se opět zobrazí okno editoru VBA.

Obrázek 2.5 Ovládací panel editoru VBA

2.2.1Chyba při provádění makra

Pokud po spuštění makra nastane chyba, zobrazí se okno schybovou zprávou. Klepnutím na tlačítko End běh makra ukončíte. Klepnutím na tlačítko Debug zobrazíte okno editoru VBA: řádek, ve kterém běh makra havaroval, je zvýrazněn žlutým pozadím.

Obrázek 2.6 Chybové hlášení při běhu makra

Tímto zobrazením editor VBA signalizuje speciální chybový režim, ve kterém můžete kód makra opravovat, ale nemůžete makro znovu spustit. Pro opětovné spuštění opraveného makra proto nejprve klepnete na tlačítko Reset sikonou modrého čtverečku. Obrázek šipky ižluté pozadí příkazu zmizí anastaví se standardní režim, umožňující spouštění maker.

Obrázek 2.7 Kód VBA vrežimu Debug

2.3Tvorba uživatelské funkce

Při tvorbě uživatelské funkce postupujete stejně jako při tvorbě makra, ale vokně pro vložení kódu označíte volbu Function. Do okna kódu se vloží první aposlední řádek kódu funkce:

Public Function Nazev_funkce()

End Function

Při volbě názvu funkce se uplatní tato pravidla:

■Název funkce musí být jedinečný vrámci modulu, kde je funkce vytvořena.

■Pokud název koliduje snázvem vjiném modulu, funkci lze vytvořit apoužívat vmodulu, kde byla vytvořena. Nelze ji použít ve vzorci vkládaném do buňky.

■Pokud je funkce pojmenována stejně jako standardní funkce včeštině, při použití vmodulu se uplatní vlastní definice, při vložení do buňky funguje jako funkce standardní.

■Pokud je včeské verzi Excelu funkce pojmenována stejně jako standardní funkce vangličtině, vlastní definice se uplatní vmodulu ipři vložení do buňky.

■Vanglické verzi Excelu nelze pro vlastní funkci použít stejný název, který je již použitý pro standardní funkci.

Zuvedeného přehledu je vidět, že přístup Excelu je poněkud zrádný. Ztohoto důvodu je jediným rozumným doporučením volit názvy jako zcela jedinečné – vyhnete se tím nečekaným překvapením.

Funkce má zpravidla jeden nebo více vstupních parametrů. Parametry zapíšete do závorek vprvním příkazu funkce aoddělíte čárkami. Návrat vypočtené hodnoty zajistí příkaz, ve kterém se dosazením do názvu funkce zapíše návratová hodnota, například:

Nazev_funkce = 20

Jako návratovou hodnotu lze použít číslo, text zapsaný vuvozovkách, kalendářní hodnotu, proměnnou nebo vzorec.

Návrat vypočtené hodnoty je nejčastěji předposlední příkaz vkódu funkce. Není to však pravidlem apříkazů snávratem vypočtené hodnoty může kód funkce obsahovat více.

Obrázek 2.8 Vložení uživatelské funkce do buňky

Příkaz snávratem vypočtené hodnoty neznamená automaticky ukončení kódu funkce. Jestliže funkce obsahuje například dva příkazy tohoto typu, první příkaz se provede, kód funkce pokračuje dále aprovede se druhý příkaz.

Uživatelská funkce se nezařadí do seznamu maker. Do buňky ji vložíte obdobným způsobem jako standardní funkci Excelu: vokně pro vložení funkce zvolíte skupinu Vlastní. Uživatelské funkce se však ve skupině Naposledy použité nezobrazují. Vzorce vbuňkách, jež využívají vlastní funkce, se po změně vstupní hodnoty automaticky přepočítají. Jestliže změníte kód funkce, přepočet buněk se neprovede amusíte si jej vynutit klávesou F9.

Vytvořenou funkci si vyzkoušejte přímo vokně VBA. Ktomu použijete položku View | Immediate Window. Vzobrazeném ladicím okně zapíšete otazník, název funkce ahodnoty parametrů vzávorkách. Řádek ukončíte klávesou ENTER. Na dalším řádku se objeví výsledek.

Obrázek 2.9 Funkce vladicím okně

Vlastní funkci je možné použít ivkódu některého makra nebo jiné funkce, ato vkterémkoliv modulu abez ohledu na to, vkterém modulu byla funkce vytvořena.

2.3.1Nepovinné parametry ve funkci

Ve funkcích je možné používat také nepovinné parametry, uvedené klauzulí Optional. Za název parametru zapíšete přiřazení výchozí hodnoty:

Public Function Vypocet(castka, Optional clo = 0.12)

Pokud při vkládání funkce do buňky vynecháte druhý parametr, použije se hodnota 0,12. Nepovinné parametry musí být zapsány jako poslední.

2.3.2Přidání nápovědy kuživatelské funkci

Uživatelskou funkci můžete opatřit také stručnou nápovědou:

Obrázek 2.10 Tvorba nápovědy kvlastní funkci

1.Na kartě Vývojář klepnete na tlačítko Makra.

2.Do textového pole pro název makra zapíšete název funkce.

3.Stisknete tlačítko Možnosti.

4.Vdalším zobrazeném okně klepnete do textového pole Popis, zapíšete text nápovědy apotvrdíte tlačítkem OK.

5.Zavřete okno se seznamem maker.

2.4Použití proměnných avzorců

Vkódu makra nebo funkce budete často potřebovat různé proměnné, nejčastěji sloužící jako mezivýsledky. Jejich názvy tvoříte podle stejných pravidel jako názvy modulů, maker nebo funkcí (tedy použijete písmena bez diakritiky, číslice nebo podtržítko).

Uživatelské funkce obsahují jeden nebo více vzorců, velmi často se vzorce využívají ivmakrech. Syntaxe vzorců je ve Visual Basicu obdobná jako při zápisu vzorce vExcelu. Použijete tedy běžná znaménka +, −, *, /, ^ (umocňování), popřípadě kulaté závorky. Vzorce vytvářené ve VBA se od vzorců vExcelu liší ve dvou bodech:

■desetinná čísla zapisujete stečkou,

■Visual Basic nepovoluje používat znak procent.

Příklady:

celkem = material + prace + rezie

marze = (celkem + doprava)* 0.14

zuroceno = ulozeno^1.27

Funkce pro výpočet DPH se základní sazbou by tedy mohla vypadat takto:

Public Function DPH(castka)

vysledek = castka * 0.21

DPH = vysledek

End Function

2.4.1Kalendářní ačasové hodnoty

Aktuální datum vrací proměnná Date. Tato proměnná je ve Visual Basicu automaticky definována při spuštění Excelu. Zápis pevné kalendářní hodnoty provedete ve tvaru #měsíc/den/rok#. Křížky vzápisu jsou nutné, jinak se jako výsledek použije dvojí dělení:

datum1 = 18 / 4 / 2018 ' Chybný zápis

datum2 = #4/18/2018# ' Správný zápis

Časovou hodnotu zadáte ve tvaru #hodina:minuta:vteřina#.

Ke kalendářní hodnotě je možné přičíst (nebo od ní odečíst) určitý počet dnů. Je také možné odečíst dvě kalendářní hodnoty od sebe:

Public Sub Datum()

splatnost = Date + 15

MsgBox splatnost

od_zacatku_roku = Date - #1/1/2021#

MsgBox od_zacatku_roku

End Sub

2.4.2Textové hodnoty

Textové hodnoty zapisujete vuvozovkách:

obec = "Smržovka"

MsgBox obec

Slučování více textů dohromady provedete znaménkem plus (+) nebo ampersandem (&). Slučování se provádí „na těsno“, proto je často třeba vložit do sloučeného textu ještě mezeru. Příklad:

obec = "Smržovka"

slouceno = obec + " vJizerských horách"

MsgBox slouceno

Není však možné slučovat dohromady textové ačíselné, případně textové akalendářní hodnoty. Vtakovém případě musíte převést číslo nebo datum na text pomocí vhodné standardní funkce VBA.

Vřadě programovacích jazyků lze při tvorbě textových hodnot používat uvozovky iapostrofy. Ve Visual Basicu toto však možné není, protože apostrof označuje komentář. Proto zápis:

tchyne = "Eulálie"

je správný, kdežto zápis:

tchyne = 'Eulálie'

je chybný.

2.4.3Logické hodnoty

Visual Basic používá dvě logické hodnoty: True (ano) aFalse (ne).2 VExcelu tomu odpovídají hodnoty PRAVDA aNEPRAVDA. Obdobně jako Excel může Visual Basic využívat také vzorce, které mají charakter podmínky. Výsledkem vzorce je pak hodnota True, nebo False podle toho, zda je podmínka splněna, nebo ne. Příklad:

Public Sub Zobraz_splatnost()

splatnost = #18/7/2021#

v_terminu = splatnost >Date

MsgBox v_terminu

End Sub

Vytvořte funkci, která ze zadané ceny asazby DPH spočítá DPH acenu sDPH. Sazba DPH je nepovinná, výchozí hodnota je 21 %.

Vsešitu Zaklady_VBA.xlsm je tato funkce vytvořena pod názvem DPH.

2.4.4Hodnota Null

Hodnota Null představuje prázdnou hodnotu, což znamená „nic“ nebo „nevíme“. Hodnota Null samozřejmě neznamená číslo 0 aneznamená ani prázdný textový řetězec. Tyto tři příkazy dosazují do proměnných hodnoty různého typu:

p1 = Null

p2 = 0

p3 = ""

Prázdná hodnota nemůže být návratovou hodnotou funkce vložené do buňky jako vzorec (vbuňce se vtomto případě zobrazí chybová hodnota #ODKAZ!). Je však možné ji zapsat do buňky (odkazy na buňku jsou popsány vkapitole 4). Buňka, do níž byla makrem zapsána hodnota Null, je prázdná.

2.5Deklarace proměnných

Vdosavadních ukázkách kódu byly používány proměnné, aniž by byl určen jejich charakter. Typ proměnné se určil až při prvním dosazení hodnoty (předtím proměnná obsahuje hodnotu Null). Je však také možné předem určit typ proměnné pomocí její deklarace. Deklaraci zapíšete příkazem:

Dim <proměnná> As <typ>

Jestliže zapíšete klauzuli As amezeru, editor VBA nabídne kontextové menu, ze kterého je možné potřebný typ vybrat klepnutím myší. Hledání vnabídce usnadňuje zápis prvního písmene.

Obrázek 2.11 Kontextové menu

Tabulka 2.1 Základní typy proměnných

Typ

Význam

Rozsah hodnot

byte

celé číslo

0 až 255

integer

celé číslo

−32768 až 32 767

long

celé číslo

±2147483 647

single

desetinné číslo

±3,4·1038

double

desetinné číslo

±1,79·10308

currency

měna

přibližně ±9 bilionů

string

text

date

datum

boolean

True/False

Deklaraci proměnné je možné provést na libovolném místě kódu před jejím prvním použitím, nejlépe hned na začátku. Hodnota, jež je dosazovaná do deklarované proměnné, musí odpovídat deklarovanému typu. Pokud tomu tak není, nastane chyba.

Visual Basic je však schopen vněkterých případech převést textovou hodnotu na údaj jiného typu. Typ tohoto údaje se řídí deklarací proměnné apřevod hodnoty nastane při jejím dosazení. Příkladem mohou být příkazy:

Dim pocet as Integer

pocet = "200"

Vtomto kódu se automaticky převede textová hodnota na celé číslo apříkazy budou fungovat správně (podmínkou ovšem je, aby textový řetězec obsahoval pouze číslice). Tento automatický převod textu se dá výhodně využít při zápisu pevné kalendářní hodnoty do proměnné. Proměnnou předem deklarujete jako hodnotu kalendářního data apak do ní zapíšete textový řetězec sdatem. Datum může být vtomto případě zapsáno podle českých zvyklostí:

Dim datum As Date

datum = "18.7.2018"

Příkaz Dim může obsahovat více deklarací, ale nemůže deklarovat několik proměnných stejného typu najednou. Příkaz

Dim kod, kod lvl2 as Integer

je chybný, zatímco příkaz

Dim kod as Integer, kod lvl2 As Integer

je správný.

Deklaraci pomocí klauzule As je možné zapsat ido prvního příkazu funkce adeklarovat vstupní parametr jako proměnnou daného typu:

Public Function Lhuta_splatnosti(datum_vystaveni As Date)

2.5.1Povinná deklarace proměnných

Jestliže na začátek modulu (před zápis první funkce nebo makra) zapíšete příkaz Option Explicit, všechny vmodulu používané proměnné musí být deklarovány. Unedeklarovaných proměnných editor VBA ohlásí chybu. Povinnost deklarovat všechny proměnné platí pouze vmodulu, ve kterém je na začátku uvedený příkaz. Je tedy možné, aby sešit obsahoval více programových modulů, které se od sebe liší povinností deklarace používaných proměnných.

Editor jazyka VBA si můžete nastavit tak, aby se příkaz Option Explicit vložil automaticky na začátek každého vytvářeného modulu:

Obrázek 2.12 Nastavení editoru VBA

1.Znabídky vyberete položku Tools | Option.

2.Klepnete na záložku první karty Editor.

3.Označíte volbu Require Variable Declaration apotvrdíte tlačítkem OK.

Rozhodnutí, zda používat povinné deklarace proměnných, nebo ne, je spíše věcí zvyku. Oba přístupy mají svoje přednosti.

Uněkterých proměnných můžete deklarovat jejich typ, ikdyž se vmodulu povinná deklarace nepoužívá. Vřadě případů je deklarace typu proměnné výhodná, protože značně usnadňuje práci při tvorbě kódu.

2.5.2Rozsah proměnných

Jazyk VBA používá důsledně princip označovaný jako „zapouzdření“. Vpraxi to znamená, že všechny proměnné jsou lokální vrámci úseku kódu (tedy funkce nebo makra), kde jsou používány. Mimo tento kód proměnné neexistují. Do funkce lze vstupovat pouze pomocí jejích parametrů. Je tedy možné používat například ve dvou různých funkcích nebo makrech dvě proměnné se stejným názvem.

Toto pravidlo je možné obejít, jestliže na začátku některého modulu zapíšete příkaz:

Public <název proměnné>

Uvedená proměnná je pak společná pro celý sešit, tedy pro všechny moduly. Proměnnou je možné také deklarovat pomocí příkazu Static. Tento příkaz deklaruje proměnnou, která je uvnitř funkce nebo makra lokální, avšak po ukončení kódu si svou hodnotu zachová. Obyčejné proměnné po ukončení kódu svou hodnotu ztrácejí.

Vytvořené uživatelské funkce mají automaticky rozsah Public (tato klauzule se použije při vložení nové funkce do modulu). Tuto funkci je možné využívat nejen vbuňkách, ale také vdalších funkcích nebo makrech. Jestliže vprvním řádku kódu funkce nahradíte klauzuli Public klauzulí Private, funkce bude existovat pouze vrámci programového modulu, kde byla zapsána. Jinde ji použít nelze ajejí název nebude zobrazen vokně pro vložení funkce do buňky.3 Příklad:

Private Function DPH_lokalní_v_modulu(castka)

DPH_lokalni_v_modulu = castka * 0.2

End Function

2.5.3Proměnné sindexem

Ve Visual Basicu je často výhodné (aněkdy nezbytné) použití proměnných, které obsahují několik hodnot. Potřebnou část proměnné určíte pomocí celočíselného indexu; hodnotu indexu zapíšete za proměnnou vkulatých závorkách. Jako hodnotu indexu můžete také použít proměnnou nebo aritmetický výraz. Indexovanou proměnnou je nutné vždy deklarovat avdeklaraci určit povolený rozsah indexu, například:

Dim marze(1 To 3)

marze(1) = 0.12

marze(2) = 0.23

marze(3) = 0.29

vypoctena_marze = cena * marze(2)

Proměnná může mít ivíce indexů ajejich rozsah může obsahovat libovolné celé číslo, například:

Dim promenna(1 To 5, -2 To 2)

Vytvoření indexované proměnné ajejí naplnění hodnotami je možné provést ivjediném řádku svyužitím příkazu Array, který má tvar:

promenna = Array(hodnota1, hodnota2, … )

Tento příkaz nahradí deklaraci Dim apotřebné dosazovací příkazy. Indexování proměnné vytvořené příkazem Array se počítá od nuly. Výpočet marže by potom vypadal takto:

marze = Array(0.12, 0.23, 0.29)

vypoctena_marze = cena * marze(1)

Automatické indexování od nuly je nezvyklé ačasto vede kchybám. Ve Visual Basicu je však velmi rozšířené aje třeba si na něj zvyknout.

Vpříkazu Array je možné použít iproměnné, do kterých se předem zapsala nějaká hodnota. Konkrétní hodnoty aproměnné je možné vpříkazu Array libovolně kombinovat. Tvorbu pole vpředchozím kódu by bylo možné zapsat také takto:

hodnota = 0.23

marze = Array(0.12, hodnota, 0.29)

2.5.4Funkce počítající několik hodnot

Pomocí proměnné sindexem můžete vytvořit uživatelskou funkci, která vrací několik hodnot najednou. Výsledkem je maticový vzorec, jenž bude zabírat dvě nebo více buněk vedle sebe. Pro vložení této funkce do vzorce na listu označíte vodorovnou oblast několika buněk, vyhledáte potřebnou funkci avložení potvrdíte se stisknutými klávesami CTRL+SHIFT.

Při tvorbě tohoto typu funkce nejprve deklarujte indexovanou proměnnou opotřebném počtu složek. Návratové hodnoty zapište do jednotlivých částí této proměnné ado názvu funkce dosaďte tuto proměnnou jako celek (bez indexu):

Public Sub Vraci_dve_hodnoty(vstup)

Dim vysledek(1 To 2)

vysledek(1) = vstup * 2

vysledek(2) = vstup * 4

Vraci_dve_hodnoty = vysledek

End Sub

2.5.5Funkce stypem

Vytvářenou funkci jako celek je možné deklarovat jako funkci surčitým typem. Provedete to tak, že za první řádek vdefinici funkce připíšete klauzuli As adatový typ:

Public Function Funkce(parametr) As String

Takto provedená deklarace znamená, že návratová hodnota funkce je uvedeného kalendářního typu.

Použití funkce stypem však nevede kpřeformátování buňky, vníž je funkce použita (jako je tomu umnoha standardních funkcí Excelu). Například funkce typu Currency zobrazí výsledek jako normální číslo, funkce typu Date zobrazí výsledek jako nenaformátované datum. Stejným způsobem funguje ostatně ifunkce vracející kalendářní hodnotu, která nemá deklarovaný typ.

Připraktické práci má použití funkce stypem smysl, pokud je návratovou hodnotou funkce text. Obsah buňky sfunkcí je zarovnán doleva, apokud je návratová hodnota složena zčíslic, nezmizí případné úvodní nuly. Hodnota vbuňce má však obecný formát.

2.6Větvení kódu

Vmakru nebo ve funkci je často zapotřebí rozvětvit kód na několik variant, ze kterých se provede pouze jedna, ato podle nastavení nějaké podmínky. Klasickým příkladem je funkce používající několik variant výpočtu, kde se použitá varianta určí podle hodnoty vstupního parametru. Vjazyku VBA jsou pro větvení kódu kdispozici dva způsoby: podmíněný příkaz If apřepínač Select.

2.6.1Podmíněný příkaz

Jednoduchý podmíněný příkaz má tvar:

If <podmínka> Then

<příkazy>

End If

Příkazů, které se provádějí vzávislosti na podmínce, může být ivíce. Podmínku může tvořit libovolný výraz nabývající hodnot True nebo False. Pokud je podmínka splněna (neboli pokud nabude hodnoty True), vnořené příkazy se provedou. Jestliže podmínka splněna není, neprovedou se.

Při zápisu podmínek můžete použít rovnítko (testuje se rovnost) nebo relační operátory <, <=, >, >=. Výraz „nerovná se“ zapíšete jako <>.

Druhou variantou podmíněného příkazu je zápis se dvěma větvemi, ukterého se provede jedna ze dvou vnořených skupin příkazů:

If <podmínka> Then

<příkazy1>

Else

<příkazy2>

End If

Je-li podmínka splněna, provedou se příkazy číslo 1, není-li splněna, příkazy číslo 2. Příklad:

If Vstupni_hodnota< 100 Then

Nazev_funkce = Vstupni_hodnota * 0.2

Else

Nazev_funkce = Vstupni_hodnota * 0.1

End If

If Parametr1>10 And (Parametr2 = 2 Or Parametr2 = 3) Then

<příkazy>

End If

2.6.2Přepínač

2.7Příkazy cyklu

2.7.1Cyklus skonečným počtem kroků

2.7.2Cyklus snekonečným počtem kroků