S tímto tématem se setkáte na našich kurzech ExcelTown.
Aktuálně: kurzy můžete absolvovat jak online, tak prezenčně.

Autor: Miroslav Lorenc

VBA je zkratkou pro Visual Basic for Applications – jazyk, pomocí kterého jde vytvářet spoustu zajímavých automatizací nebo hromadných operací nejen v Excelu (také ve Wordu, Outlooku a dalších aplikacích).

Nedávno měl jeden zákazník požadavek:

Potřebuju, aby mi Excel vytvářel v sešitu 200 listů a klikáním je to zdlouhavé. Došel jsem k závěru, že potřebuji naprogramovat makro, které to udělá za mě.

  • VBA pozitivní ajťák řekne, že je to hračka a napíše kód
Sub Vytvorit200Listu()
   For i = 1 To 200
   Sheets.Add After:=ActiveSheet
   Next i
End Sub
  • VBA zdrženlivý ajťák doporučí zákazníkovi, aby šel do nastavení Excelu a zvolil si 200 listů při otevření nového sešitu

  • Pak se do diskuze vloží zkušený uživatel a zeptá se zákazníka na co potřebuje 200 listů, co s nimi plánuje dělat a možná doporučí úplně jiný postup nebo i jinou aplikaci než Excel.

Zní to jako vtip? Ano. A praxe je často podobná.

Kdy (ne)používat makra

Často se setkáváme s tím že zadavatelé školení chtějí pro své zaměstnance školit makra přesto, že to zaměstnanci nepotřebují. Makra v Excelu jsou někdy (chybně?) chápána jako nejvyšší úroveň znalostí Excelu. Běžný ani pokročilý uživatel ale většinou nepotřebuje psát vlastní makra.

Tip: Aplikace MS Office jsou s námi už čtyři dekády. Během té doby v nich neustále přibývají nové funkce a nástroje. Pokud chcete například v Excelu udělat nějakou smysluplnou operaci, tak si můžete být téměř jistí, že nejste sami. Pro smysluplné operace (tj. operace, pro které je aplikace designována) zde máme vestavěné funkce a nástroje. Hledejte způsob, jak nástroje, které aplikace obsahuje místo psaní vlastních maker.

Excel je aplikace určená pro provádění výpočtů a logických operací a jejich vizualizaci. Word je aplikace na vytváření strukturovaných dokumentů. Pokud se snažíme “znásilňovat” standardní využití aplikací pomocí VBA, nemusí to skončit příliš dobře. Na vytváření vlastních aplikací, formulářů, dashboardů,… je vhodnější použít specializovanou aplikaci. Je to stejné jako s auty – sporťák je super, dodávka je super, teréňák je super, ale není vhodné použít jedno z těchto aut na okruh, rodinný výlet i tahání dřeva z lesa současně.
VBA není zcela určitě vhodné prostředí pro vývoj softwaru.

Pár postřehů z praxe

Soubory obsahující makra mohou poškodit počítač, proto jsou některými administrátory a mailovými službami zakázány.

Drtivou většinu dokumentů, které vytváříme, si nenecháváme sami pro sebe, ale spolupracujeme na nich nebo je sdílíme s dalšími lidmi. Pokud do takového dokumentu začleníme makra, měli bychom mít jistotu, že danému kódu porozumí i naši spolupracovníci. Jak ale můžete vědět, jakou verzi Excelu používají vaši spolupracovníci? Jak zajistíte kompatibilitu pro budoucí verze Excelu?

U maker, se kterými se setkáváme, není téměř nikdy dobře okomentovaný kód. Veškeré následné úpravy jsou tedy obtížné. Často ani sám autor po čase netuší, co přesně má daná část kódu provádět.

S makry se v aplikacích setkáváme všude – každé tlačítko, každý příkaz, nástroj – vše jsou přednastavené sledy úkonů / operací – tedy makra.

Úskalí využití maker

Vytvářet vlastní makra má svá úskalí. Museli bychom je při vytváření koncipovat tak, abychom zajistili kompatibilitu nejen mezi historickými ale i mezi budoucími verzemi aplikací. Museli bychom vlastní kód VBA velmi dobře okomentovat / zdokumentovat, a v průběhu užívání takového makra se o něj náležitě starat (aktualizovat, poskytovat podporu uživatelům,…)

Samostatnou kapitolou je využívání maker v Apple macOS – zde je využití velmi omezené a obtížné, především nefungují ActiveX prvky..

Uživatelé se často snaží využívat makra tam, kde to není třeba – například pokud chtějí dosáhnout nějaké funkcionality, ale prostě nevědí, že už jí aplikace obsahuje nebo jí neumí najít. Snaží se jí často velmi zjednodušeným způsobem nahradit vlastním kódem.

  • Přeskupování sloupců
  • Naformátování tabulky
  • Změna formátu
  • Import / export dat

Někdy také řešíme pomocí maker něco, co je následek nějaké systémové chyby, nekompatibility apod. Namísto toho bychom měli řešit příčinu. Např. u analytické práce nám ⅔ práce zabere čištění, konverze, validace, třídění apod. Místo úprav takovýchto dat bychom měli hledat způsob, jak dostat data v požadované kvalitě a struktuře.

Značnou nevýhodou vlastních maker je i to, že operace realizované pomocí maker jsou nevratné. Např. pokud smažete sloupec pomocí tlačítka na pásu karet nebo klávesovou zkratkou, můžete operaci vrátit zpět. Když na totéž použijete makro, máte smůlu – zpět to nevrátíte.

V nastavení Excelu najdeme řadu příkazů, které jsou užitečné a na pásu karet je nenajdeme. Můžeme si je tam ale přidat.

Doporučení pro práci s makry

Tento článek neměl za cíl hanit nebo odrazovat uživatele od používání maker. Makra jsou dobře využitelná pro automatizaci a hromadné operace, které nelze standardními nástroji dosáhnout, jako rozšíření vestavěných nástrojů a funkcí Excelu, pro lokalizaci toho, o čem vývojáři nemohli tušit (např. odstranění diakritiky), spolupráci Excelu s dalšími aplikacemi, webovými službami a operačním systémem a řadu dalších užitečných věcí. Měli bychom se ale vždy předem zamyslet, zda to, co děláme pomocí maker:

  1. dává smysl (tj. používáme Excel k tomu, k čemu byl určen – kalkulace, logické operace, jednoduché vizualizace),
  2. jestli nejde použít nějaký vestavěný nástroj (odstranění duplicit, seskupování, relace, sdílení, SharePoint…),
  3. jestli daná operace nejde elegantněji realizovat pomocí Power Query, jestli se v Excelu nepokoušíme složitě vytvořit něco, co by šlo snadno a lépe např. v Power BI.

Jak se v kódu VBA vyznat, jak nahrávat a psát vlastní makra a další praktické informace se dozvíte na našem kurzu Makra a VBA pro neprogramátory.

S tímto tématem se setkáte na našich kurzech ExcelTown.
Aktuálně: kurzy můžete absolvovat jak online, tak prezenčně.