Visual Basic for Application
Leopold Bartoš
1 1.1
Začátek Úvod
Visual Basic for Application (VBA) je programové prostředí pro produkty, které jsou zahrnuty do balíku, který dostal jméno Microsoft Office. Microsoft Excel je mohutný nástroj pro vytváření, databází, seznamů, tabulek, výpočetních tabulek, účetních systémů, grafů, kontingenčních tabulek a kdoví čeho ještě. Viděl jsem už i přehrávač empétrojek vytvořený v Excelu. Nestál sice za moc, ale jde to. Společně s podporou VBA toho umí Excel ještě mnohokrát více. Ten, kdo si zkrátka myslí, že ovládá Excel, nezná ani polovinu toho, co Excel poskytuje. Většinou je to jen proto, že ty funkce ani nepotřebuje, ale také proto, že netuší, že by to Excel dokázal. 1.2
Programové prostředí VBA
Okno VBA si zobrazíte v prostředí Excel 2007 na záložce Vývojář tlačítkem Visual Basic. Máte-li Excel 2003 je to v nabídce Nástroje – Makra – Editor jazyka Visual Basic. Obrázek 1
Pokud nemáte spuštěný žádný jiný soubor, než nový sešit, objeví se vám okno (Obrázek 1), které je rozděleno na tři části: Project, Properties,
a hlavní okno pro zápis kódu. Pokud se vám nezobrazilo okno Project, zobrazíte jej tlačítkem s šipkou vlevo, pokud nevidíte okno Properties, použijte tlačítko vpravo. Teď si všimněte, že v okně Project máte VBAProject pro otevřený sešit (v mém případě Sešit 2). Ten sešit je rozdělen do listů (já mám jen jeden, vy budete mít asi tři) a položky ThisWorkbook. To znamená, že lze psát programy pro události, které se odehrávají na úrovni listu, anebo celého sešitu. 1.3
Události
Co jsou to události? Sešit má například tyto události: Otevření sešitu Zavření sešitu Uložení sešitu Tisk sešitu apod. List má další události, jako například: Pravý klik Levý klik Změna Aktivace listu Deaktivace listu atd. Kromě těchto událostních procedur je možné pro Excel psát i makra, která jsou nezávislá na událostech sešitu. Z nabídky Insert použijte příkaz Module a vytvoří se vám složka Modules a v ní Module1. Okno pro psaní kódu, které bylo dosud šedé se stane aktivní a vy můžete psát svůj první program. 1.4
Psaní programu
Nebojte se, není to nic těžkého. Každý program se začíná slůvkem Sub, za něj se napíše název programu. Název nesmí obsahovat diakritiku ani mezery. V okně kódu napište „Sub Test“ a dejte Enter. Editor VBA doplní co je potřeba. Doplní závorky za název programu (ty slouží pro případný zápis parametrů programu) a doplní kód pro uzavření programu End Sub. Na malém programu si ukážeme, jak změnit hodnotu buňky v prvním řádku, prvním sloupci aktivního listu. Mezi řádky Sub Test() a End Sub napište tento text: Cells(1, 1) = "Můj první VB program" jak znázorňuje Obrázek 2 a stiskněte tlačítko, na které míří šipka (Obrázek 2). Na pozici buňky A1 aktivního listu se objeví text „Můj první VB program“ (Obrázek 3).
Obrázek 2
Obrázek 3
Je třeba něco dlouze vysvětlovat? Kód Cells(1, 1) = "Můj první VB program" znamená, že buňka v řádku jedna a sloupci jedna bude obsahovat textový řetězec „Můj první VB program“. Zápis adresy buňky se děje ve formátu R1C1 tzn. číslo řádku, číslo sloupce. Zápis formou A1 není možný. Textové řetězce, jak vidíte ze zápisu kódu, se vkládají do uvozovek. Může obsahovat diakritiku, mezery, program VBA je bere prostě tak, jak jsou. 1.5
Druhý program
Vyzkoušejte si i druhý program (Obrázek 4). Postupujte stejně jako v předchozí kapitole. Napište Sub Text2 a vložte Enter. Mezi Sub Text() a End Sub napište tento kód: Text = Cells(1, 1) MsgBox = Text Znamená to, že určitou proměnnou Text naplníme hodnotou z buňky prvního řádku a prvního sloupce. Pokud spustíte program zelenou šipkou (Obrázek 2), načte se hodnota této buňky a vloží do dialogové zprávy. Objeví se okno (Obrázek 5).
Obrázek 4
Obrázek 5
Samozřejmě, že by ten kód šlo napsat i takto: MsgBox = Cells(1, 1) Ale to byste se nedozvěděli, jak pracovat s proměnnou .
2 2.1
Vytvoření programu pro událost Úvod
Sešit Excelu může reagovat na celou řadu událostí. Událost je například otevření, zavření nebo tisk sešitu. Je jich však mnohem více a to dává uživatelům Excelu mnoho možností. Například při každém otevření sešitu lze nastavit jeho standardní vzhled. To znamená, že když se vám otevře, bude vždy stejný a ne odrolovaný, zmenšený nebo zvětšený a bude vždy aktivní ten list, který chceme. Věřte, není to nic komplikovaného. Také list sešitu má svoje události, například aktivace listu, vytvoření listu, dvojklik atd. Na vše lze programově reagovat, ovšem nemělo by se to přehánět. Vše by mělo být účelné a nemělo by to uživatele připravit na infarkt, ale mělo by mu to intuitivně sloužit.
2.2
Událost otevření sešitu
V editoru VBA dvakrát klikněte v okně Project na objekt ThisWorkbook. Objeví se vám obrazovka Obrázek 6. Obrázek 6
Nad oknem pro psaní kódu je rozbalovací pole s hodnotou (General). Není to nic vojenského, ale ze seznamu raději vyberte hodnotu Workbook. Tím se vám změní i hodnota v pravém rozbalovacím poli a automaticky se vybere událost Open (Obrázek 7) a do okna se vám napíše text Private Sub Workbook_Open()
End Sub V rozbalovacím poli si můžete prohlédnout seznam událostí, které jsou k dispozici pro sešit… Ani nevím, na co jsou všechny . Mezi začátek a konec programu pak napište text: nazev = ActiveWorkbook.Name MsgBox "Soubor " & nazev & " otevřen." jak vidíte na obrázku (Obrázek 8). Ten text znamená, že do proměnné vložíte hodnotu, kterou je název aktivního sešitu a do dialogové zprávy vložíte text, který vám poví, že soubor ten a ten je otevřen.
Obrázek 7
Obrázek 8
Pak soubor uložte a zavřete. Při následném otevření se vám objeví zpráva (Obrázek 9), že soubor, jak jste si ho nazvali, je otevřen.
Obrázek 9
3
Konec
Takže první kroky máte za sebou. Jestli se vám vše podařilo, pak gratuluju. Už víte jak vybadá editor VBA, umíte napsat jednoduchý kód a zareagovat na událost sešitu. Ani to nebolelo, že?