V této kapitole bude jednoduchým příkladem ilustrována možnost přímého zápisu makra prostřednictvím kódu v jazyku VBA. Nejprve vytvoříme dvě šablony se dvěma různými hlavičkovými papíry a nazveme je Dopis1.dot a Dopis2.dot. V každé šabloně vytvoříme makro se jménem AutoNew (může být stejné jako ve studijním článku Automatická makra). Cílem bude vytvořit šablonu Volby.dot, ve které bude další makro AutoNew, jež zobrazí dialogové okno s dotazem "Chceš psát Dopis1?" a s tlačítky Ano a Ne. Při volbě Ano se otevře šablona Dopis1.dot, při volbě Ne se zobrazí další dialogové okno s dotazem "Chceš psát Dopis2?" s tlačítky Ano a Ne. Při volbě Ano se otevře šablona Dopis2.dot, při volbě Ne se zobrazí dialogové okno s hlášením "Tak to bude prázdný papír!" a otevře se Prázdný dokument na šabloně Normal.dot.
Nejprve vytvoříme dříve popsaným postupem šablony Dopis1.dot a Dopis2.dot a v nich makra AutoNew. Potom vytvoříme šablonu Volby.dot. V této šabloně vytvoříme dvě makra (SpustD1 a SpustD2), která budou otevírat nový dokument na základě šablon Dopis1.dot a Dopis2.dot.
Makra zaznamenáme následujícím způsobem (při otevřené šabloně Volby.dot):
Obdobným způsobem vytvořte makro SpustD2.
Podívejme se na animaci
V této chvíli jsou v šabloně Volby.dot dvě makra SpustD1 a SpustD2. Nyní vytvoříme v této šabloně makro AutoNew. Makro vytvoříme zápisem kódu VBA, význam jednotlivých příkazů vysvětlíme později.
Při stále otevřené šabloně Volby.dot vytvoříme makro AutoNew zápisem kódu VBA:
Sub AutoNew()
'
' AutoNew Makro
' Makro vytvořeno 7.12.2002, autor Václav Vrbík
'
Vysledek = MsgBox("Chceš psát Dopis1?", vbYesNo + vbQuestion)
If Vysledek = vbYes Then
Call SpustD1
GoTo Konec
End If
Vysledek = MsgBox("Chceš psát Dopis2?", vbYesNo + vbQuestion)
If Vysledek = vbYes Then
Call SpustD2
GoTo Konec
End If
MsgBox "Tak to bude prázdný papír!", vbExclamation
Konec:
End Sub
Podívejme se na animaci
Správnou funkci makra vyzkoušejte následujícím způsobem:
Podívejme se na animaci
Závěrem stručně vysvětlíme význam použitých příkazů VBA. Poznamenejme, že zde uvedené příkazy slouží pro ilustraci se snahou použít co nejmenší počet jednodušších příkazů VBA. Zkušenější programátor by jistě namísto neúplného podmíněného příkazu použil úplný podmíněný příkaz a nepoužil by příkaz skoku.
Ve skupině NewMacros šablony Volby.dot jsou tři makra. Makra SpustD1 a SpustD2 spouští šablony Dopis1.dot a Dopis2.dot. Tato makra byla vytvořena pomocí záznamníku maker. Makro AutoNew zapsané přímo ve VBA si popíšeme.
Kód makra začíná Sub AutoNew() a končí EndSub. Mezi těmito příkazy jsou další příkazy makra ve VBA. Řádky kódu začínající apostrofem jsou tzv. komentáře (slouží pro psaní poznámek, které obvykle usnadňují porozumění kódu makra). Funkce MsgBox("Chceš psát Dopis1?", vbYesNo + vbQuestion) zobrazí dialogové okno s hlášením "Chceš psát dopis?".
Parametry funkce jsou následující: řetězec "Chceš psát Dopis1?" udává text zobrazený v dialogovém okně, vbYesNo definuje zobrazení tlačítek Ano a Ne, vbQuestion definuje zobrazení ikony s otazníkem.
Příkaz Vysledek = MsgBox("Chceš psát Dopis1?", vbYesNo + vbQuestion) indikuje, zda uživatel kliknul na tlačítko Ano či Ne. V případě, že kliknul na Ano, je proměnné Vysledek přiřazena hodnota vbYes, pokud kliknul na Ne, je přiřazena hodnota vbNo.
Příkaz If Vysledek = vbYes Then Call SpustD1 testuje, zda proměnná Vysledek má hodnotu vbYes (bylo kliknuto na tlačítko Ano). V případě, že bylo kliknuto na Ano, pak (Then) se spustí makro SpustD1 (Call SpustD1)a program pokračuje instrukcemi, které jsou zapsány za návěštím Konec: (GoTo Konec). End If ukončuje příkaz If (tzv. neúplný podmíněný příkaz).
Další část kódu funguje obdobně (s tím rozdílem, že se týká spuštění makra SpustD2). Zobrazí se obdobné dialogové okno.
Příkaz MsgBox "Tak to bude prázdný papír!", vbExclamation generuje dialogové okno s hlášením "Tak to bude prázdný papír!".
Parametry funkce jsou následující: řetězec "Tak to bude prázdný papír!" definuje text zobrazený v dialogovém okně, druh zobrazených tlačítek na rozdíl od předcházejících dvou dialogových oken není definován a tudíž se implicitně zobrazí tlačítko OK. Konstanta vbExclamation definuje ikonu s vykřičníkem.
Návěští Konec: slouží pouze jako cíl pro příkazy skoku (GoTo Konec) a nevyvolává žádnou činnost.