Záměrem tohoto kurzu je ukázat programování ve VBA na praktických, užitečných příkladech. Než se k nim dostaneme, potřebujeme několik základních informací o VBA, abychom věděli, jak vůbec začít. Ukážeme si je na obligátním příkladu Hello, World!
Založení projektu
Výchozím bodem pro naše programování je VBA správce projektů (menu Pomůcky > Makro > Správce projektů). Založíme nový projekt (tlačítko Nový Projekt) s názvem HelloWorld a otevřeme Visual Basic Editor (tlačítko
Visual Basic Editor, dále VBE).
Ve VBE vidíme vlevo okno Projekt – HelloWorld. (Pokud ne, otevřeme ho v menu View > Project Explorer, Ctrl + R). Obsahuje náš projekt HelloWorld. Rozbalíme ho a vidíme složku Modules a v ní položku Module 1. Dvojklikem nebo pomocí kontextového menu (pravé tlačítko + View Code) otevřeme okno pro psaní kódu.
Procedury
Programový kód je posloupnost příkazů, které seskupujeme do samostatně spustitelných procedur. Ve VBA se označují klíčovým slovem Sub, které pochází ze slova subroutine. Rutina (routine) je jiné označení pro proceduru. Mimo VBE, v hlavním prostředí MicroStationu, se pro proceduru používá termín marko (macro).
Modul může obsahovat jednu a více procedur. Každá musí být deklarována – označena jedinečným názvem, který pokud možno co nejpřesněji popisuje její účel. Název může obsahovat písmena, číslice a podtržítko, první znak ale musí být písmeno. Tečky a mezery nejsou povoleny. Na velikosti písma nezáleží.
Pozn. 1: Používání velkých a malých písmenek
VBA obsahuje řadu vyhrazených klíčových slov, jako např. Sub, se kterým jsme se právě seznámili. Tato slova nelze použít pro označení procedury.
VBE provádí automatickou kontrolu kódu a upozorní nás na chybný zápis. Zkuste napsat Sub 1HelloWorld a stiskněte Enter.

Ihned jsme upozorněni na chybný zápis, první znak nesmí být číslice. Řádek s chybou je zobrazen červeně.
Pozn. 2: Nastavení chybového upozornění
Označení červenou barvou bude fungovat i nadále.
Pokud zvolíme platný název procedury a stiskneme Enter, výsledek je následující:

VBE doplnil za název procedury kulaté závorky. Do nich se v případě potřeby vkládají parametry. Dále doplnil označení konce procedury End Sub. Získali jsme tak platnou deklaraci procedury a můžeme začít psát její kód.
Účel tohoto našeho prvního programu je zobrazení zprávy „Hello World!“. Jak a kde ji zobrazíme? Máme několik možností. Nejprve se podíváme, jak to provést přímo ve VBE.
Objekty
Součástí jazyka VBA je mnoho různých součástí potřebných pro vytváření a spuštění programů. Postupně, podle potřeby v probíraných příkladech, si je budeme představovat. V tomto okamžiku použijeme jednu z těchto součástí – objekt Debug.
Objekt je, velmi jednoduše řečeno, jakýsi „balík“ nebo „kontejner“ pro uložení dat a implementaci funkcí, které pracují s těmito daty nebo provádějí jiné operace. Datové hodnoty uložené v objektu se nazývají vlastnosti ( properties) a funkce se nazývají metody (methods). Dohromady tvoří členy (members) objektu.
Pro náš účel tedy využijeme objekt Debug a jeho metodu Print. Tato funkce vypíše zadanou hodnotu do ladícího okna.
Ladící okno
Ve výchozím nastavení je ve spodní části VBE okno Immediate. (Pokud ho nevidíte, otevřete ho v menu View > Immediate Window, Ctrl + G.) Je to tzv. ladící okno. Uvnitř procedury ho při jejím běhu (run time) můžeme využít jako výstup pro vypsání různých údajů.
Příkazy
Uvnitř naší procedury napíšeme:
Debug.Print "Hello, World!"
Debug je jméno objektu. Tečka (operátor tečka) slouží pro přístup ke členům objektu. Po jejím zadání se rozevře seznam dostupných členů, v tomto případě jsou to jen metody Print a Assert. Vybereme Print a potvrdíme klávesou Tab. (Můžeme použít i Enter, ale tím zároveň vložíme a přejdeme na nový řádek, což se v tomto případě nehodí.)

Pozn. 3: Nefunkční rozbalovací seznam?
Metoda Print přijímá parametr (argument), jehož hodnota bude vypsaná v ladícím okně. V našem případě je to text (v terminologii VBA řetězec, string) Hello World!. Text musí být vždy uzavřen v uvozovkách.
Máme řádek programového kódu, který je dostatečný na to, aby byl spuštěn a proveden – příkaz. Uděláme to pomocí tlačítka . (Pokud tlačítko nevidíte, zapněte panel nástrojů Standard v menu View > Toolbars.) Můžeme použít i menu Run > Run Sub/UserForm nebo klávesovou zkratku F5.
Pokud je kurzor uvnitř naší procedury, spustí se automaticky. Pokud je mimo, zobrazí se dialog Macros. Vybereme v něm naši proceduru a stiskneme tlačítko Run.
V ladícím okně se zobrazí text Hello World!. Napsali a spustili jsme první vlastní program v MicroStationu VBA!

Přehlednost kódu
Naše procedura obsahuje jeden řádek s jedním příkazem. Na řádku může být příkazů více, oddělují se pak dvojtečkou, např.:
Debug.Print "Hello,": Debug.Print "World!"
Pro přehlednost kódu je ale dobrým zvykem psát jeden příkaz na jeden řádek. Ze stejného důvodu se používá vkládání prázdných řádků a odsazení pomocí tabelátoru. Není to nutné a na běh programu to nemá žádný vliv, ale zlepšuje to čitelnost kódu.
Délka kódu na jednom řádku je libovolná, okno se automaticky posunuje doleva. Pro dobrou čitelnost je vhodnější využívat šířku okna bez nutnosti posouvání. Pokud je příkaz dlouhý a překračuje šířku okna, můžeme použít sekvenci znaků pro pokračování příkazu na dalším řádku: mezeru a podtržítko:
AwesomeFunction argument1, argument2, argument3 _
argument4, argument5
Komentáře
Do kódu můžeme podle potřeby umísťovat komentáře. Mohou být na samostatném řádku nebo na konci řádku za příkazem. Označují se apostrofem (Alt + 39). VBA ignoruje vše za tímto znakem:

Pozn. 4: Výjimka pro použití apostrofu
msg = "It's ok"
Pozn. 5: Zablokování kódu pomocí komentářů


Výrazy
Argumentem metody Debug.Print může být text (jako v našem příkladu), číslo nebo jakýkoli výraz (expression), což je různá kombinace proměnných, konstant, operátorů a klíčových slov, která vrací text nebo číslo:
Debug.Print "abc"
'výstup: abc
Debug.Print 123
'123
Debug.Print 1 + 1
'2
Debug.Print Now
'11.04.2023 17:36:13
Knihovny
V poslední ukázce je použita funkce Now, která vrací textový řetězec s aktuálním datem a časem.
Je součástí standardní knihovny VBA. Knihovna (library) je soubor funkčních procedur a funkcí. Vedle standardní knihovny můžeme používat různé další knihovny, zejména knihovny aplikací, pro které píšeme náš program (MicroStation, Excel…).
VBA používá objektový model, knihovny jsou uspořádány do hierarchické struktury objektů.
Pozn. 6: Object Browser
- HelloWorld – náš vlastní projekt, neobsahuje žádné objekty,
- MicroStationDGN – s touto knihovnou budeme později pracovat velmi často,
- stdole – knihovna pro OLE automatizaci (komunikaci mezi různými aplikacemi),
- VBA – standardní knihovna
Funkce VBA
Funkce Now je jedna z mnoha funkcí obsažených v knihovně VBA. Tyto funkce provádí různé operace, zejména matematické a textové, ale i různé jiné. Můžeme je zadávat pouze jejich jménem, nebo použít objekt VBA a operátor tečka. Tím se nám zobrazí jejich seznam:

Nápověda
Popis všech součástí VBA najdeme v nápovědě. vyhledávání je velmi jednoduché. Umístíme kurzor do názvu vestavěné funkce, objektu nebo klíčového slova a stiskneme F1. Nápověda se otevře přímo na příslušném místě.
Další využití ladícího okna
Pokud chceme vyzkoušet, jak některá funkce VBA pracuje, nemusíme kvůli tomu psát a spouštět proceduru. V některých případech můžeme využít ladící okno. Napíšeme do něho otazník a název funkce:
?Now
Stiskneme Enter a výsledek hned vidíme na novém řádku.
Stejným způsobem můžeme ladící okno použít jako kalkulačku:
?1+1
Můžeme zadávat i příkazy, které nevrací žádnou hodnotu, ale provádějí nějakou akci. V takovém případě nepoužíváme otazník:
Beep
Beep je funkce standardní knihovny, která vydá zvukové pípnutí.
Funkce MsgBox
Napsali a spustili jsme vlastní proceduru – z pohledu uživatele makro. Co se stane, když ho uživatel spustí? Vyzkoušíme to.
Přejdeme do hlavního okna MicroStationu. Otevřeme dialog Makra (menu Makro > Makra, Alt + F8). Vybereme HelloWorld a stiskneme tlačítko Run.
Dalším způsobem spuštění makra je použití dialogu Příkazy (menu Pomůcky > Příkazy), do kterého zadáme:
vba run HelloWorld
Ať tak či tak, nic se nestane. Naše procedura nedělá nic, co by bylo viditelné pro uživatele. Abychom to změnili, použijeme jinou standardní funkci: MsgBox (message box), která zobrazí zadaný výraz jako dialog v MicroStationu.
Upravený kód vypadá takto:
Sub HelloWorld()
MsgBox "Hello, World!"
End Sub
Když ve VBE spustíme takto opravenou proceduru, aktivuje se hlavní okno MicroStationu a v něm se zobrazí dialog s naší zprávou. Stejný výsledek uvidíme i z pohledu uživatele, pokud spustíme toto makro v dialogu Makra:
