Predstavte si úlohu, že mate vytvoriť makro, ktoré zapíše do tabuľky rozmeru 10x10 nejaké hodnoty. Začali by ste písať kód makra a zistíte, že musíte písať rovnaký blok kódu viackrát. Nebolo by jednoduchšie vytvoriť krátku konštrukciu, ktorá by opakujúcu činnosť urobila za vás?
Tak ako i iné programovacie jazyky, i jazyk Visual Basic uspôsobený pre LibreOffice podporuje cykly.
Príkaz Do … Loop
Jeden z príkazov, ktorý podporuje opakovanie jednotlivých príkazov alebo rovno celých blokov príkazov, je Do … Loop.
Príklad 1: Ukážka cyklu s pomocou príkazu Do … Loop
Sub KontrolaVstupu REM začiatok procedúry Do REM začiatok cyklu Vstup = InputBox("Zadajte ľubovoľné číslo") REM vstup od užívateľ If IsNumeric(Vstup) = False Then REM podmienka Print "Nechápeš pojmu číslo?" REM ak je splnená podmienka End If Loop Until IsNumeric(Vstup) = True REM ak je splnená podmienka cyklu, cyklus skončí Print "Zadal si číslo: "&Vstup REM výpis výsledku End Sub REM koniec procedúry
Napíšeme ľubovoľné číslo
Výstup, ktorý potrebujeme
Rozbor makra:
Začiatok cyklu definujeme slovom Do. Cyklus končí slovom Loop. Do dialógového okna užívateľ zadá vstupný údaj, ktorý sa priradí do premennej Vstup. Ďalej pomocou funkcii isNumeric zisťujeme, či skutočne bola zadaná číselná hodnota. Jej návratová hodnota je buď True, ak je hodnota číselná alebo False, ak nie je.
Ak sa splní podmienka, čiže ak užívateľ zadá číselnú hodnotu, cyklus skončí a vykonávanie ďalších príkazov za telom cyklu pokračuje. Na vytvorenie podmienky v cykle použijeme kľúčové slovo Until. Za slovom Until píšeme podmienku.
Deklarácia Do … Loop je nasledovná:
Do príkazy … Loop
Until verzus While
Cyklus s deklarovanou podmienkou pomocou slova Until sa vykonáva dovtedy, pokým nie je splnená podmienka. Pri While je to presne opačne. Cyklus sa vykoná len vtedy, ak je splnená podmienka.
Využitie podmienky v cykle s pomocou Until už poznáte, ukážeme si, ako to vyzerá s pomocou While.
Príklad 2: Ukážka podmienky v cykle pomocou slova While
Sub KontrolaVstupu REM začiatok procedúry Do REM začiatok cyklu Vstup = InputBox("Zadajte ľubovoľné číslo") REM vstup od užívateľa If IsNumeric(Vstup) = False Then REM podmienka Print "Nechápeš pojmu číslo?" REM ak je splnená podmienka End If Loop While IsNumeric(Vstup) = False REM ak nie je splnená podmienka cyklu, cyklus skončí Print "Zadal si číslo: "&Vstup REM výpis výsledku End Sub REM koniec procedúry
Rozbor makra:
Makro sme pri použití While museli maličko upraviť. Tentoraz podmienka v cykle hovorí, že musí byť splnená podmienka, aby cyklus pokračoval. Inak sa ukončí a pokračuje makro ďalej.
Exit Do
Na ukončenie cyklu môžeme použiť špeciálny príkaz, Exit Do. Využíva sa vo vnútri cyklov a často je využívaný s podmienkami If, ElseIf a Else.
Ukážeme si to na príklade.
Príklad 3: Využitie príkazu Exit Do.
Sub KontrolaVstupu REM začiatok procedúry Do REM začiatok cyklu Vstup = InputBox("Zadajte ľubovoľné číslo") REM vstup od užívateľa If IsNumeric(Vstup) = False Then REM podmienka Print "Nechápeš pojmu číslo?" REM ak je splnená podmienka Else Exit Do REM ukončí cyklus, ak bola splnená východisková podmienka Else End If Loop Print "Zadal si číslo: "&Vstup REM výpis výsledku End Sub REM koniec procedúry
Záverečný opakovací príklad
Príklad 4: V príklade pre zmenu využijeme funkciu IsDate.
Sub KontrolaVstupu REM začiatok procedúry Do REM začiatok cyklu Vstup = InputBox("Zadajte dátum vašeho narodenia") REM vstup od užívateľa If IsDate(Vstup) = False Then REM podmienka Print "Nechápeš pojmu dátum?" REM ak je splnená podmienka Else Exit Do REM ukončí cyklus, ak bola splnená východisková podmienka Else End If Loop Print "Zadal si dátum: "&Vstup REM výpis výsledku End Sub REM koniec procedúry
Napíšeme ľubovoľný dátum, napríklad dátum
narodenia