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
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
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
Skúsme prvý vstup 100, druhý vstup 5 (%)
Rozbor makra: Najprv deklarujeme premenné Cena a Zlava. 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.