BLACK FRIDAY! Slevy až 80 % jsou všude. Tak je nepropásni a přejdi do rostoucího IT oboru!
The real BF 2020

Lekce 1 - Úvod do VBA

Visual Basic for Application je procedurální programovací jazyk klasického typu, ostatně jeho prapředkem je velice rozšířený interpret Basic, kdysi dávno implementovaný téměř na všech počítačích bez rozdílu operačního systému. Jako modernější Visual Basic byl ve škále produktů firmy Microsoft mnoho let. Jeho přizpůsobení pro práci v MS Office nese název Visual Basic for Application, dále jenom ve zkratce bude uváděno VBA.

Výhodou celého balíku VBA je jeho jednoduchost ve srovnání s moderními molochy programových prostředí, dále obsahuje stabilní a jednotné jádro, které se napříč mezi aplikacemi nemění a používá klasických datových typů, operátorů, příkazů a funkcí, se kterými se mnozí z vás setkali v jiných jazycích, například v informatice. Navíc jednoduché pořízení maker a jejich převod do VBA dělají tento jazyk i dnes stále atraktivním. Kostrbatostí této mnohačetné implementace je, že jednotlivé aplikace MS Office mají určitý, dosti odlišný, okruh použití a proto také mají odlišný objektový model. V každé z aplikací je proto objektová část ve většině odlišná. Pro dobré řízení a podporu aplikací MS Office je tedy třeba se podrobněji seznámit s detaily, zaměřenými na podporu práce v konkrétní aplikaci.

Proč VBA?

  • Nenáročnost - Jednoduchý a tradiční programový systém, který lze využít v rámci většiny aplikací Office. Dá se začít od makra, převést jej na kód programu a studovat, jak je postaven.
  • Automatizace - Programový kód umožňuje mnohé dílčí operace v aplikacích Office spojit a vytvořit poměrně složité dílo. Příkladem je třeba z adresy, kódu použití a čísla výrobku sestavení variantního dopisu, v rozsahu od dodacího listu, faktury, přes děkovný dopis až po urgenci a odeslání.
  • Přenositelnost - Procedury a funkce, které si vytvoříte v jednom projektu, lze snadno přenést a doladit v projektu jiném.

Pracovní prostředí VBA

V sedmé lekci kurzu MS Access pro pokročilé je objasněno základní vývojové prostředí jazyka VBA, které je stejné ve všech aplikacích MS Office.

Připomínám, nejjednodušší cestou do prostředí VBA z aplikace MS Office je kombinace kláves Alt + F11.

Obrázek níže shrnuje celkový pohled na prostředí VBA:

Pracovní prostředí si budeme v průběhu kurzu dále "osahávat", s nabývajícími znalostmi a mistrovstvím ve vývoji programů.

Vymezení obsahu kurzu

Nejde o kompendium definující plné seznamy a přesné definice, cílíme na hlavní a nejčastěji používané prvky jazyka. Vše směřuje k osvojení si základů jazyka a vytváření jednoduchých a snadno použitelných částí. Napadá mě jedna podobnost s reálným lidským jazykem. Zde se učíme nejčastější nebo běžné případy, ale existuje spousta výjimek, omezení, rozšíření, doplnění nebo dodatečných definic. Ta podobnost? V češtině existuje kolem tisíce vybraných slov, ale ve škole se jich učíme jenom asi šedesát.

Definice

Modul

Modul je část programu, který je samostatně pojmenován a jako takový je objektem aplikace, např. Excelu. Proto se také zobrazuje ve stromu základních částí projektu ve vývojovém prostředí VBA, podokno vlevo nahoře. Modul může obsahovat prakticky libovolný počet procedur nebo funkcí do velikosti textu 64 KB, ale rozumné je mít přehled, a proto je dobré si vytvářet více modulů, podle logických částí nebo skupin v programu.

Option Explicit

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Option Explicit je příkaz, který se uvádí na počátku modulu a definuje, že všechny proměnné v modulu musí být před použitím deklarovány.

Důrazně varuji, aby byl tento příkaz vždy používán, ušetří vám mnohé nesnáze a zmatky v použitých proměnných.

Prostředí VBA tento příkaz automaticky vygeneruje v každém novém modulu, pokud si to takto ve vývojovém prostředí nastavíme. Učinit tak můžeme v Tools - Options a v dialogu Options zaškrtneme Require Variable Declaration.

Procedura

Procedura je uvedena ve VBA rezervovaným slovem Sub. Je to pojmenovaná část programu, která je samostatně prováděna na základě volání názvem a parametry. Speciálním případem procedury je funkce, uvedena rezervovaným slovem Function, která může vracet výslednou hodnotu. Z hlediska praktičnosti: Její název je možno volat makrem a tím ji zpřístupnit přepínacímu panelu nebo pásu karet.

Proměnná

Proměnná je pojmenované místo v paměti, které můžeme naplňovat a měnit jeho hodnotu. Má různé typy, se kterými je odlišně zacházeno v rámci vyhodnocování výrazů a práce programu.

Rozsah platnosti deklarovaných proměnných

Dim deklaruje proměnnou v modulu nebo proceduře či funkci, platnost má v oboru své deklarace. Doporučuji vyhýbat se deklaraci stejně nazvaných proměnných pro rozdílné účely (např. vAuto označuje v modulu název značky auta, v proceduře deklarujeme vAuto jako konkrétní SPZ jednoho auta).

V době tvorby programu to zvládnete, při opravě nebo změně po delším čase si budete nadávat a všechno přepisovat. Ukázka je v prvním příkladu.

Public proměnné, definované touto klausulí na úrovni modulu, jsou přístupny v celé úloze, napříč všemi moduly. Podobně tato fráze platí pro deklaraci funkcí nebo procedur.

Private je protipólem definice Public. Proměnné, procedury nebo funkce tímto způsobem definované, jsou lokální na úrovni provedené deklarace. Mimo ni nejsou vidět.

Static je deklarace pro proměnné v proceduře, které si zachovávají hodnotu po celou dobu práce programu. V jiném případě deklarování proměnných (Dim) v proceduře jsou při každém volání hodnoty neurčeny a nově se nastavuje jejich hodnota.

Zkušeností je, že pracuji pouze s jedním typem deklarace v procedurách. Pokud budu mít někde Dim a jinde Static, za nějaký čas nebudu vědět, kde jsem kterou definici použil.

Příklady

Konec nudných výkladů, jdeme psát programový kód pro začátečníky. Ukážeme si, že pokud deklarujeme stejný název proměnné v modulu a v proceduře, jde o dvě rozdílné proměnné. Uvědomíme si, že proměnná deklarovaná v proceduře platí jenom v té konkrétní proceduře! Druhý příklad ukáže práci s funkcí, která vrací hodnotu.

Vytvoříme si nový sešit Excelu. Do vývojového prostředí VBA se dostaneme jednoduše klávesami Alt + F11. Zkontrolujeme si nastavení Option Explicit podle dřívějšího výkladu v kapitole Definice. Vytvoříme si nový modul z menu Insert, Modul.

Pro případné uložení sešitu s programem VBA je nutno použít Sešit Excelu s podporou maker, jste na to upozorněni při ukládání sešitu.

Připomínám, že všechny znaky na řádku za apostrofem ' jsou v textu programu komentáře.

Výpis hodnot proměnných je schematicky znázorněn na obrázku, který také ilustruje první příklad.

Příklad deklarace proměnných stejného názvu na dvou úrovních

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ázka jak námi vytvořená funkce vrací hodnotu

Vytvoříme si nový modul a v něm vytvoříme funkci, která vypočítá tři na třetí. Dále si vytvoříme proceduru, která bude tuto funkci volat a vypíše výsledek.

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í lekce u konce.

V příští lekci, Datové typy ve VBA, si definujeme datové typy a operátory, také si napíšeme jednoduché funkce


 

Všechny články v sekci
Základy Microsoft VBA
Článek pro vás napsal Luboš Marvan
Avatar
Jak se ti líbí článek?
1 hlasů
Snahou autora je žít podle svého
Aktivity (3)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!