1. diel - Úvod do VBA
Visual Basic for Application je procedurálny programovací jazyk klasického typu, ostatne jeho prapredkom je veľmi rozšírený interpret Basic, kedysi dávno implementovaný takmer na všetkých počítačoch bez rozdielu operačného systému. Ako modernejšie Visual Basic bol v škále produktov firmy Microsoft mnoho rokov. Jeho prispôsobenie pre prácu v MS Office nesie názov Visual Basic for Application, ďalej len v skratke bude uvádzať VBA.
Výhodou celého balíka VBA je jeho jednoduchosť v porovnaní s modernými Molochovi programových prostredia, ďalej obsahuje stabilné a jednotné jadro, ktoré sa naprieč medzi aplikáciami nemení a používa klasických dátových typov, operátorov, príkazov a funkcií, s ktorými sa mnohí z vás stretli v iných jazykoch , napríklad v informatike. Navyše jednoduché obstaranie makier a ich prevod do VBA robia tento jazyk aj dnes stále atraktívnym. Kostrbatosťou tejto viacnásobné implementácie je, že jednotlivé aplikácie MS Office majú určitý, dosť odlišný, okruh použitia a preto tiež majú odlišný objektový model. V každej z aplikácií je preto objektová časť vo väčšine odlišná. Pre dobré riadenie a podporu aplikácií MS Office je teda potrebné sa podrobnejšie zoznámiť s detailmi, zameranými na podporu práce v konkrétnej aplikácii.
Prečo VBA?
- Nenáročnosť - Jednoduchý a tradičný programový systém, ktorý možno využiť v rámci väčšiny aplikácií Office. Dá sa začať od makrá, previesť ho na kód programu a študovať, ako je postavený.
- Automatizácia - Programový kód umožňuje mnohé čiastkové operácie v aplikáciách Office spojiť a vytvoriť pomerne zložité dielo. Príkladom je napríklad z adresy, kódu použitia a čísla výrobku zostavenie variantného listu, v rozsahu od dodacieho listu, faktúry, cez ďakovný list až po urgencii a odoslanie.
- Prenositeľnosť - Procedúry a funkcie, ktoré si vytvoríte v jednom projekte, možno ľahko preniesť a doladiť v projekte inom.
Pracovné prostredie VBA
V siedmej lekcii kurze MS Access pre pokročilých je vysvetlené základné vývojové prostredie jazyka VBA, ktorý je rovnaký vo všetkých aplikáciách MS Office.
Pripomínam, najjednoduchšou cestou do prostredia VBA z aplikácie MS Office je kombinácia klávesov Alt + F11.
Obrázok nižšie sumarizuje celkový pohľad na prostredie VBA:
Pracovné prostredie si budeme v priebehu kurzu ďalej "ohmatávať", s nadobúdateľmi znalosťami a majstrovstvami vo vývoji programov.
Vymedzenie obsahu kurzu
Nejde o kompendium definujúce plné zoznamy a presné definície, cielime na hlavné a najčastejšie používané prvky jazyka. Všetko smeruje k osvojeniu si základov jazyka a vytváranie jednoduchých a ľahko použiteľných častí. Napadá ma jedna podobnosť s reálnym ľudským jazykom. Tu sa učíme najčastejšie alebo bežné prípady, ale existuje veľa výnimiek, obmedzení, rozšírenie, doplnenie alebo dodatočných definícií. Tá podobnosť? V slovenčine existuje okolo tisícky vybraných slov, ale v škole sa ich učíme len asi šesťdesiat.
Definícia
Modul
Modul je časť programu, ktorý je samostatne pomenovaný a ako taký
je objektom aplikácie, napr. Excelu. Preto sa tiež zobrazuje
v strome základných častí projektu vo vývojovom prostredí
VBA, podokno vľavo hore. Modul môže obsahovať prakticky
ľubovoľný počet procedúr alebo funkcií do veľkosti textu 64
KB, ale rozumné je mať prehľad, a preto je dobré si vytvárať viac modulov,
podľa logických častí alebo skupín v programe.
Option Explicit
Option Explicit je príkaz, ktorý sa uvádza na začiatku modulu a definuje, že všetky premenné v module musí byť pred použitím deklarované.
Dôrazne varujem, aby bol tento príkaz vždy používaný, ušetrí vám mnohé ťažkosti a zmätky v použitých premenných.
Prostredie VBA tento príkaz automaticky vygeneruje v každom novom module, ak si to takto vo vývojovom prostredí nastavíme. Urobiť tak môžeme v Tools - Options a v dialógu Options zaškrtneme Require Variable Declaration.
Procedúra
Procedúra je uvedená vo VBA rezervovaným slovom Sub. Je to pomenovaná časť programu, ktorá je samostatne vykonávaná na základe volania názvom a parametre. Špeciálnym prípadom procedúry je funkcia, uvedená rezervovaným slovom Function, ktorá môže vracať výslednú hodnotu. Z hľadiska praktickosti: Jej názov je možno volať makrom a tým ju sprístupniť prepínaciemu panelu alebo pásu kariet.
Premenná
Premenná je pomenované miesto v pamäti, ktoré môžeme napĺňať a meniť jeho hodnotu. Má rôzne typy, s ktorými je odlišne zaobchádzané v rámci vyhodnocovania výrazov a práce programu.
Rozsah platnosti deklarovaných premenných
Dim deklaruje premennú v module alebo procedúre či
funkciu, platnosť má v odbore svojej deklarácie. Odporúčam
vyhýbať sa deklarácii rovnako nazvaných premenných pre rozdielne
účely (napr. vAuto
označuje v module názov
značky auta, v procedúre deklarujeme vAuto
ako
konkrétny ŠPZ jedného auta).
V čase tvorby programu to zvládnete, pri oprave alebo zmene po dlhšom čase si budete nadávať a všetko prepisovať. Ukážka je v prvom príklade.
Public premenné, definované touto klauzúl na úrovni modulu, sú prístupné v celej úlohe, naprieč všetkými modulmi. Podobne táto fráza platí pre deklarácii funkcií alebo procedúr.
Private je protipólom definícia Public. Premenné, procedúry alebo funkcie týmto spôsobom definované, sú lokálne na úrovni vykonanej deklarácie. Mimo nej nie sú vidieť.
Static je deklarácia pre premenné v procedúre, ktoré si zachovávajú hodnotu po celú dobu práce programu. V inom prípade deklarovanie premenných (Dim) v procedúre sú pri každom volaní hodnoty neurčenej a novo sa nastavuje ich hodnota.
Skúseností je, že pracujem len s jedným typom deklarácie v procedúrach. Ak budem mať niekde Dim a inde Static, za nejaký čas nebudem vedieť, kde som ktorú definíciu použil.
Príklady
Koniec nudných výkladov, ideme písať programový kód pre začiatočníkov. Ukážeme si, že ak deklarujeme rovnaký názov premenné v module a v procedúre, ide o dve rozdielne premenné. Uvedomíme si, že premenná deklarovaná v procedúre platí len v tej konkrétnej procedúre! Druhý príklad ukáže prácu s funkciou, ktorá vracia hodnotu.
Vytvoríme si nový zošit Excelu. Do vývojového prostredia VBA sa dostaneme jednoducho klávesmi Alt + F11. Skontrolujeme si nastavenie Option Explicit podľa skoršieho výkladu v kapitole Definícia. Vytvoríme si nový modul z menu Insert, Modul.
Pre prípadné uloženie zošita s programom VBA je nutné použiť Zošit Excelu s podporou makier, ste na to upozornený pri ukladaní zošita.
Pripomínam, že všetky znaky na riadku za apostrofom '
sú v
texte programu komentáre.
Výpis hodnôt premenných je schematicky znázornený na obrázku, ktorý tiež ilustruje prvý príklad.
Príklad deklarácia premenných rovnakého názvu na dvoch úrovniach
Option Explicit 'deklarujeme si dvě proměnné na úrovni modulu Dim vA Dim vTxt Public Sub sub01() 'procedura předvede, jak lokální definice stejné proměnné v proceduře zastíní proměnnou definovanou na vyšší úrovni, tedy v modulu 'stejné názvy proměnných na různých úrovních je praxe, kterou NEDOPORUČUJI '------------------------- 'definice stejné proměnné v proceduře jako na úrovni modulu Dim vTxt 'proměnná vA je na úrovni modulu a použijeme ji jako numerickou vA = 10 'proměnná vTxt je definována zde v proceduře, naplníme ji textem vTxt = "Lekce 01" 'výpis proměnných do okna Immediate Debug.Print "sub01 - Číslo: " & vA & " Text: " & vTxt 'volání druhé procedury sub02 'ukončení procedury End Sub Public Sub sub02() 'procedura nemá deklarované proměnné, vypíše proměnné z modulu. ' -> proměnná vTxt na úrovni modulu nebyla naplněna, v proceduře sub01() je lokální. '----------------- Debug.Print "sub02 - Číslo: " & vA & " Text: " & vTxt End Sub
Ukážka ako nami vytvorená funkcia vracia hodnotu
Vytvoríme si nový modul a v ňom vytvoríme funkciu, ktorá vypočíta tri na tretí. Ďalej si vytvoríme procedúru, ktorá bude túto funkciu volať a vypíše výsledok.
Option Explicit Public Sub subVyledek() 'procedura k naplnění deklarované proměnné volá níže deklarovanou funkci 'výsledek je vypsán do okna Immediate '---------------------------------------------------------- 'deklarujeme proměnnou Dim vA 'do proměnné dosadíme hodnotu, kterou nám vrátí volaná funkce. Název funkce se chová jako proměnná vA = fn3na3 'vypíše výsledek vA = 27 Debug.Print vA End Sub Public Function fn3na3() 'deklarujeme si funkci, která vrací výsledek ve svém názvu 'do názvu funkce dosadíme výraz, výpočet tři umocněno na třetí '------------------------------------ fn3na3 = 3 * 3 * 3 End Function
Tým je dnešná lekcia u konca.
V nasledujúcom kvíze, Kvíz - Úvod do VBA, dátové typy, si vyskúšame nadobudnuté skúsenosti z predchádzajúcich lekcií.