Programovanie makier v LibreOffice: Spolupráca makier (1)

LO.png V tomto dieli by som sa chcel bližšie pozrieť na formy komunikácie medzi makrami. Môžu si jednotlivé procedúry (makra) vymieňať informácie? Ak áno, ako? I to vám priblíži tento diel.  

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

Prvý vstup od užívateľa Prvý vstup od užívateľa

Druhý vstup od užívateľa Druhý vstup od užívateľa

Výsledok Výsledok

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

Vstup od užívateľa Vstup od užívateľa

Vstup od užívateľa Vstup od užívateľa

Výsledok Výsledok

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

Výsledok Výsledok

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

Výsledok Výsledok

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.

(Jako ve škole) Průměr: 3.40 | Hodnotilo: 10
 

Přidat názor

 

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích najdete v nápovědě. Diskuzi můžete sledovat pomocí RSS kanálu.

 
Eduard Boldižár

Eduard Boldižár

Som redaktorom stránky astrotech.cz. Mám 24 rokov. Čas trávim v IT škole. Medzi moje záľuby patrí astronómia, sci-fi literatúra a programovanie.

 
 
 
woo jaw demo hz