Spúšťanie makra ako príkaz
Syntax jazyka Basic nám umožňuje vytvárať kooperáciu medzi jednotlivými makrami. Ukážeme si, ako volať v makre ďalšie makro. Môžme volané makro definovať v „nadradenom“ makre ako príkaz alebo ako funkciu (budúci diel uvidíte).
Ak definujeme volané makro ako príkaz, môžeme si zvoliť bezparametrický príkaz alebo parametrický.
1. program: Voláme makro ako príkaz bez parametra
Sub hlavneMakro REM začiatok procedúry makroPrikazBezParametru REM makro ako príkaz End Sub REM koniec procedúry Sub makroPrikazBezParametru Dim a as Integer REM deklarácie premenných Dim b as Integer a = InputBox("Zadajte prve číslo") REM vstup od užívateľa b = InputBox("Zadajte druhe číslo") MsgBox "Výsledok sčítania je: "& a+b &Chr(10)&"Výsledok odčítania je: "& a-b &Chr(10)&"Výsledok násobenia je: "& a*b &Chr(10)&"Výsledok delenia je: "& a/b REM výstup na obrazovku End Sub
2. program: Voláme makro ako príkaz s parametrom
Sub hlavneMakro Dim a as Integer Dim b as Integer a = InputBox("Zadajte prve číslo") b = InputBox("Zadajte druhe číslo") makroPrikazSParametrom a + b REM parametrický príkaz End Sub Sub makroPrikazSParametrom(vysledok) REM makro s parametrom MsgBox "Výsledok: "& vysledok End Sub
Rozbor obidvoch makier: V prvom programe sa vykoná najprv makro s príkazom. Následne sa vykoná druhé makro (procedúra) definované ako príkaz. Zvyšok je už jasný.
Zaujímavejšia situácia nastáva v druhom programe pri definovaní parametru. Parameter je v tomto prípade sčítanie dvoch premenných (čísel) zadaných užívateľom. Druhé makro s týmto argumentom ďalej pracuje.
Predávanie premenných medzi makrami
Môžu si makra vymieňať premenné? Áno, už pri písaní makra ako príkaz s argumentom ste mali tu česť.
V programovaní makier pod LibreOffice poznáme dve typy predávania premenných. Pomocou hodnoty a odkazu (referencia).
3. program: Predanie pomocou hodnoty
Sub volajuceMakro Sprava1 = "Práve odbilo " Sprava2 = " hodín" Cas = 10 VolaneMakro(Sprava1, Sprava2, Cas) MsgBox Sprava1 & Cas & Sprava2 End Sub Sub VolaneMakro(ByVal Spr1, ByVal Spr2, ByVal Cs) REM predanie pomocou hodnoty Spr1 = "Zachviľu je " Spr2 = " hodín" Cs = 10 End Sub
Rozbor makra: Vo volajúcom makre nastavíme dané hodnoty a následne ich predáme druhému makru.
Čo sa stane s premennou, ktorá sa predáva z makra do makra? Premenná sa skopíruje a pri volaní druhé makro získa premennú. A to pomocou magického slova ByVal. Je to predávanie pomocou hodnoty (copy/paste metóda). Avšak, síce môžeme ďalej meniť hodnotu v druhom makre, nemá to ale vplyv na zmenu hodnoty v prvom makre.
4. program: Pomocou referencie
Sub volajuceMakro Sprava1 = "Práve odbilo " Sprava2 = " hodín" Cas = 10 VolaneMakro(Sprava1, Sprava2, Cas) MsgBox Sprava1 & Cas & Sprava2 End Sub Sub VolaneMakro(ByRef Spr1, ByRef Spr2, ByRef Cs) REM predanie pomocou referencie Spr1 = "Zachviľu je " Spr2 = " hodín" Cs = 10 End Sub
Rozbor makra: Tak ako v predošlom programe, i tu rovnako definujeme premenné a našou snahou je ich predať druhému makru. Tentoraz ale miesto predania pomocou hodnoty predávame pomocou referencie. Použijeme na to kľúčové slovo ByRef.
Druhé makro pri predávaní pomocou referencie získa prístup k hlavnej pamäte, kde je daná premenná uložená. To znamená, že následná zmena premennej je globálna.
V ďalšom diele sa pozrieme na funkcie a ešte si trochu rozpitváme takzvané povinné a nepovinné parametre.