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.
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.



















