IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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:

Základy Microsoft 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.

Základy Microsoft VBA

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.

Základy Microsoft VBA

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.

Základy Microsoft VBA

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í.


 

Všetky články v sekcii
Základy Microsoft VBA
Preskočiť článok
(neodporúčame)
Kvíz - Úvod do VBA, dátové typy
Článok pre vás napísal Luboš Marvan
Avatar
Užívateľské hodnotenie:
4 hlasov
Snahou autora je žít podle svého
Aktivity