EXIT
Pokud chcete přerušit cyklus nebo makro, musíte programu určit, kdy má toto přerušení provést. Určení provedete zapsáním příkazu exit na příslušném místě. Pokud chcete přerušovat pouze za určitých podmínek, zasaďte příkaz do vyhodnocení podmínky (viz Kód pro text_exit). V okamžiku, kdy je podmínka splněna, se cyklus přeruší.
Například:
sub text_exit dim cislo as integer, cislo2 as integer cislo = inputbox("Zadejte číslo 1 – 10") cislo2 = inputbox("Zadejte druhé 1 – 10") do while cislo < 10 cislo = cislo + 1 if cislo = cislo2 then exit do endif print cislo loop end sub
Pokud zadáte první číslo menší než druhé, bude se provádět cyklus do té doby, dokud si nebudou obě čísla rovna. Naopak, když bude druhé číslo menší, provede se cyklus bez přerušení až do splnění podmínky, tedy do 10.
Stejně můžete použít příkaz EXIT i v FOR NEXT – zde zadáváte Exit For.
Možnosti příkazu EXIT jsou ještě větší a používá se například i Exit sub pro přerušení makra, Exit function pro přerušení funkce atd.
GOTO
Tento příkaz provede skok a přesune výkon makra na místo, které mu určíte tzv. "návěstím". Návěstí můžete zapsat i před příkaz goto, ale j e nutné ho označit dvojtečkou " navesti: " (bez uvozovek).
goto navesti ' příkazy navesti: ' příkazy
TIP: není nutné mít návěstí zapsané za příkazem GOTO, můžete jej zapsat i před příkaz GOTO, dejte si ale pozor na spuštění nekonečné smyčky. Pro tento případ doporučuji provést test pomocí IF...THEN ve smyčce a případně EXIT SUB.
GOSUB RETURN
Tento příkaz má proti goto jednu obrovskou výhodu. Stejným způsobem přesune výkon makra na určené místo programu, ale navíc se dokáže i vrátit zpět a navázat na další průběh makra.
' příkazy gosub navesti ' příkazy – tady naváže makro po příkazu return navesti: ' příkazy return end sub
Pro obsluhu maker jsou tyto funkce a příkazy základem a jejich znalost dokáže zásadně ulehčit a zrychlit práci.
Ošetření chyb v programu
Občas se stane, že váš program povede k chybě. Zpočátku asi často, ale to není případ, kdy je nutné nějak ošetřovat chybu. Mám na mysli chyby, které jsou nevyhnutelné – například se makro pokouší otevřít neexistující dokument apod. V tomto případě program hlásí chybu, zastaví se a otevře se Editor Basicu s označeným řádkem, kde program havaroval, a s jejím popisem. Takovou chybu můžete ošetřit několika způsoby.
Samozřejmě nebudete programovat makro, které povede k chybě. Může se ale stát, že makro pracuje s jinými dokumenty, které někdo omylem smaže. Takových situací může být samozřejmě více. Způsoby, které si ukážeme, zabrání havarování makra tím, že chybu vynulují nebo ji přímo napraví.
Příkaz k ošetření chyby vložte na začátek makra! Pokud dojde k chybě před definicí příkazu, k ošetření chyby nedojde.
ON ERROR GOTO
Princip je stejný jako u funkce GOTO s tím rozdílem, že se příkaz spustí pouze v případě chyby. V tomto případě si můžete zobrazit hlášení s jejím popisem.
TIP: V případě, že zadáte příkaz ve tvaru On Error GoTo 0, provede se vynulování chyby, to však neznamená, že bude chyba odstraněna!
On Error Goto hlaska ' příkazy, které vedou k chybě hlaska: print "Nastala chyba" exit sub
ERROR
Tato funkce vrátí chybovou zprávu o chybě v programu. Následují další funkce, které slouží k identifikaci chyby.
ERR
Funkce Err vrátí chybový kód identifikující chybu, k níž došlo v programu. Tuto funkci si můžete přidat do oznámení chyby v příkazu On Error GOTO.
ERL
Funkce Erl vrátí číslo řádku, na kterém k chybě došlo. I tuto funkci můžete využít ve svém programu. Stačí si naprogramovat hlášku o chybě takto:
print "Nastala chyba: " & Err &" - "& Error$ & " : " &"na řádku č. " & Erl
Tento výpis může pomoci při hledání místa a druhu chyby. Pozor: Erl vrací číslo řádku v Editoru Basicu, ne řádku v makru. Číslo řádku najdete v Editoru dole na stavovém řádku.
TIP: Doporučuji si ošetření chyby nastavit při vytváření delších maker.
ON ERROR GOTO … RESUME NEXT
Přidáním jednoduchého příkazu můžete vrátit běh makra tam, kde byl přerušen chybou. Tzn., že makro ohlásí chybu, přeskočí na příkaz k odstranění (GOTO) a vrátí se zpět, kde bylo přerušeno. V praxi můžete příkaz zapsat takto:
sub test_on_error on error goto oprava doc = thisComponent.sheets(0) print "Ukončit makro " exit sub ' případné příkazy pro manipulaci se sešitem oprava: print "Nastala chyba: " &; Err &;" - "&; Error$ &; " : " &;"na řádku č. " &; Erl resume next end sub
Pokud spustíte toto makro určené pro práci s Calcem ve Writeru, nahlásí program kód a druh chyby, číslo řádku, na kterém k ní došlo, a vrátí se zpět na řádek následující za nahlášením chyby.
ON ERROR RESUME NEXT
Další možností je vynechat příkaz GOTO a pokračovat ihned následujícím řádkem, to však můžete použít jen tehdy, kdy další příkazy a funkce makra nepovedou opět k chybě.
Pokročilé vyhledávání chyb
V některých kódech makra může být dohledání chyby i přes výše uvedené opatření složitější. Makro se totiž zastaví, když k chybě dojde, potřebujete ovšem odstranit příčinu chyby. Tato příčina může být na jiném řádku. Pro tyto případy poskytuje Editor Basicu nástroje, díky kterým můžete makro „krokovat“ řádek po řádku…
Na horní liště Editoru naleznete několik ikonek, které jste ještě nepoužívali. Vysvětleme, si k čemu slouží.
POZOR: všechny takto volané funkce začínají na začátku modulu. Pokud tedy nemáte makro zapsané jako první, přesuňte jej na začátek.
Krok procedury
Pomocí této ikonky můžete procházet spuštěným makrem krok po kroku. Makro se spustí a automaticky zastaví za další procedurou. Lze využít i klávesovou zkratku [SHIFT + F8].
Krok dovnitř
Téměř stejně funguje další možnost Krok dovnitř. Spustí makro a zastaví za dalším příkazem. I zde můžete použít
klávesovou zkratku [F8].
Krok ven
Tento příkaz je opakem předchozích – vrací se zpět. Po kliknutí na ikonku se makro vrátí zpět na předchozí proceduru v aktuálním makru. Klávesová zkratka pro tento příkaz neexistuje.
Bod přerušení
Další výraznou pomocí je bod přerušení. Umístěte kurzor na řádek, na kterém chcete, aby se makro zastavilo (může jich být i více). Po spuštění makra se proces zastaví na takto označených řádcích. I toto můžete využít k lokalizaci chyby. Po stisknutí klávesy [F5] bude makro pokračovat až do konce, nebo do dalšího bodu přerušení.
Bod přerušení vložíte a odstraníte pomocí ikonky nebo klávesové zkratky [F9].
Krok přerušení (zastavení makra na určitém místě)
Správa bodu přerušení
Po spuštění vyvolá dialogové okno pro správu bodů přerušení.
Kukátko
Pod tímto „zajímavým“ názvem se skrývá další užitečná funkce Editoru. Kukátko, které musíte přiřadit k proměnné, sleduje její hodnotu po celou dobu běhu makra. I zde můžete použít vícenásobného výběru.
Hodnoty proměnných uvidíte ve spodní části editoru v samostatném okně.
Pro přidání proměnné do kukátka můžete použít klávesu [F7]. Odstranění se provádí v okně kukátka. Doporučuji kombinovat s výše zmíněnými metodami pro krokování makra.
V příštím díle si projdeme vstupní funkce. Ty se budou hodit při předávání hodnot do programu a pro řízení běhu programu (ne na základě podmínky, ale našeho rozhodnutí).