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

LO.png V tomto článku si dokončíme možností spolupráce medzi makrami. Čakajú na vás funkcie a taktiež si ukážeme, ako môžete vytvoriť nepovinné parametre, keď ich potrebujete.  

Makro ako funkcia

Ako sme v minulom článku hovorili, makro môžeme definovať ako príkaz, ale aj ako funkciu. Na vzorovom príklade si ukážeme, ako sa také funkcie deklarujú a využívajú.

1. príklad: Makro ako funkcia

Sub PiataMocninaMakro REM začiatok procedúry
 Dim Cislo As Double REM deklarácia premennej
 Cislo = InputBox("Zadajte ľubovoľné čislo") REM vstup od užívateľa
 Vysledok = PiataMocnina(Cislo) REM využitie funkcie
 MsgBox Vysledok REM výpis na obrazovku
 End Sub REM koniec procedúry
 Function PiataMocnina(Cisielko) REM deklarujeme funkciu 
 PiataMocnina = Cisielko ^ 5 REM umocňujeme
 End Function REM koniec procedúry

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

Výsledok Výsledok

Rozbor makra:

Makro začne deklaráciou premennej Cislo, ktorej hodnotu priradí užívateľ. Následne premenná Cislo sa stane argumentom pre funkciu PiataMocnina. Funkciu zadeklarujeme magickým slovom Function a definovaná hodnota ako argument sa predá funkcii. Dôležite je pomenovať vo funkcii premennú PiataMocnina zhodne s pomenovaním funkcie.  Inak sa nepriradí hľadaná hodnota do premennej Vysledok v primárnom makre!

Fajn, ešte neutekajme od funkcii. Konkrétne tento príklad, je ho možné nejak vylepšiť?

2. program: Vylepšená verzia prvého príkladu

Sub mocninatorMakro
 Dim Cislo As Double
 Dim Mocninator As Integer
 Cislo = InputBox("Zadajte ľubovoľné číslo")
 Mocninator = InputBox("O koľko chcete číslo umocniť?")
 Vysledok = PiataMocnina(Cislo, Mocninator)
 MsgBox Vysledok
 End Sub
 
 Function PiataMocnina(Cisielko, Nasobok)
 PiataMocnina = Cisielko ^ Nasobok
 End Function

03pics.png Vstup od užívateľa

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

Výsledok Výsledok

Rozbor makra: Vylepšeným makrom demonštrujem, že je úplne v našej réžii, ako definujeme parametre funkcie. V tomto sme slobodný.

Povinné a nepovinné parametre

Vráťme sa ešte k parametrom. V minulom diele sme rozoberali makra ako príkazy aj s parametrami. Ak sme uviedli príkaz s parametrami, automaticky sme doplnili v druhom makre dané parametre. Otázkou ale je, že sa môže naskytnúť situácia, kde akútne nepotrebujeme parameter. Riešením je definovanie takzvaných nepovinných parametrov. Príklad nám ujasní, o čo ide.

3. príklad: Povinné a nepovinné parametre

Sub obchodMakro
 Dim Cena as Double
 Dim Zlava as Integer
 Cena = InputBox("Zadajte cenu")
 Zlava = InputBox("Zadajte zľavu v percentách (0-100)")
 If Zlava = 0 Then
 CenaVZlave(Cena) REM príkaz len s jedným parametrom
 Else
 CenaVZlave(Cena,Zlava)
 End If
 End Sub
 
 Sub CenaVZlave(Cena, Optional Zlava) 
 REM druhé makro s jedným povinným a nepovinným parametrom
 If IsMissing(Zlava) Then 
 Zlava = 0
 End If
 VyslednaCena = Cena * (100-Zlava) / 100
 MsgBox("Zadaná cena: "& Cena & Chr(10) & 
 "Zľava v percentách: " & Zlava & Chr(10) & "Cena v zľave: " & VyslednaCena
 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

Skúsme prvý vstup 100, druhý vstup 5 (%)

Výsledok Výsledok

Rozbor makra: Najprv deklarujeme premenné CenaZlava. Následne užívateľ im priradí hodnoty. Ak užívateľ zadá hodnotu 0 pre premennú Zlava, vykoná sa makro ako príkaz ale len s jedným parametrom! Volanému makru nastavíme, že druhý parameter je nepovinný pomocou slova Optional.

Ak užívateľ zadá vyššiu hodnotu ako 0, tak sa spustí príkaz, ktorý už poznáte z minulého článku.

Pri vykonávaní druhého makra potrebujeme, aby procedúra rozlíšila, že druhý argument bol alebo nebol definovaný. Na to využijeme funkciu IsMissing. Ak parameter chýba, jednoducho definujeme premennú Zlava hodnotou 0. Nakoniec vypočítame výslednú cenu v zľave.

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

Komentáře

user avatar neutr
Odpovědět
Programovanie makier v LibreOffice: Spolupráca makier (2)
19. 10. 2016, 13:00:59
Jenom malou připomínku - spíš jako vzpomínku. Pomocí InputBoxu lze zadávat bez problému číslo ačkoliv základní proměnná je string.

V některých případech bylo (je?) nutné předefinovat string na číselnou hodnotu. To stačí udělat pomocí Val(). Příklad kdy předem definujeme proměnnou jako numerický typ.
iVal as Long
iVal = Val((Inputbox("Zadejte číslo","Val(InputBox)"))
Samozřejmě lze pomocí Val(iVal) dosáhnout téhož.

Pro běžnou praxi novějších verzí AOO, LO to není potřeba, ale v nápovědě pro verze 3.xx (a možná i verze 4.xx) to tak bylo ještě uvedeno. Bez upřesnění to v současnosti funguje i pro "Option Explicit".

V budoucnu se s tím můžeme setkat znovu jako s potřebou. Popisovaná vlastnost souvisí s automatickým přiřazením typu proměnné. Takže pro dlouhodobé výhledy, nebo spouštění pod staršími verzemi doporučuji postup s Val().
user avatar Eduard Boldižár
Odpovědět
Re:Programovanie makier v LibreOffice: Spolupráca makier (2)
19. 10. 2016, 17:54:20
Vďaka za doplnenie ;)

Odpovědět

 

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