Můžete narazit na nějaké problémy s kódem VBA, ale jak problém najdete? Někdy může váš kód VBA vyžadovat nějaké ladění. Pokračujte ve čtení a objevte čtyři nejběžnější metody ladění kódu Excel VBA:
-
Zkoumání kódu
-
Vkládání funkcí MsgBox na různá místa v kódu
-
Vkládání příkazů Debug.Print
-
Použití vestavěných ladicích nástrojů Excelu
Zkoumání kódu
Snad nejpřímější technikou ladění je jednoduše se blíže podívat na váš kód, abyste zjistili, zda můžete najít problém. Tato metoda samozřejmě vyžaduje znalosti a zkušenosti. Jinými slovy, musíte vědět, co děláte. Pokud budete mít štěstí, chyba hned vyskočí a vy se plácnete do čela a řeknete: "D'oh!" Když bolest čela ustoupí, můžete problém vyřešit.
Všimněte si použití slov: "Pokud budete mít štěstí." Často totiž objevíte chyby, když na svém programu pracujete osm hodin v kuse, jsou 2 hodiny ráno a běžíte na kofeinu a síle vůle. V takových chvílích máte štěstí, pokud dokonce můžete vidět svůj kód, natož najít chyby. Proto se nedivte, že pouhé prozkoumání kódu nestačí k tomu, abyste našli a odstranili všechny chyby, které obsahuje.
Pomocí funkce MsgBox
Běžným problémem mnoha programů je, že jedna nebo více proměnných nenabývá hodnot, které očekáváte. V takových případech je sledování proměnné (proměnných) během běhu kódu užitečnou technikou ladění. Jedním ze způsobů, jak toho dosáhnout, je vložení dočasných funkcí MsgBox do vaší rutiny. Pokud máte například proměnnou s názvem CellCount, můžete vložit následující příkaz:
MsgBox CellCount
Když spustíte rutinu, funkce MsgBox zobrazí hodnotu CellCount.
Často je užitečné zobrazit hodnoty dvou nebo více proměnných v okně zprávy. Následující příkaz zobrazuje aktuální hodnotu dvou proměnných: LoopIndex (1) a CellCount (72), oddělené mezerou.
MsgBox LoopIndex & „ “ & CellCount
Všimněte si, že tyto dvě proměnné jsou zkombinovány s operátorem zřetězení (&) a vložit mezi ně znak mezery. V opačném případě pole zprávy spojí dvě hodnoty dohromady, takže budou vypadat jako jedna hodnota. Místo znaku mezery můžete také použít vestavěnou konstantu vbNewLine. vbNewLine vloží konec odřádkování, který zobrazí text na novém řádku. Následující příkaz zobrazuje tři proměnné, každou na samostatném řádku:
Použití okna se zprávou k zobrazení hodnoty tří proměnných.
MsgBox LoopIndex & vbNewLine & CellCount & vbNewLine & MyVal
Tato technika není omezena na sledování proměnných. Během běhu kódu můžete použít okno se zprávou k zobrazení nejrůznějších užitečných informací. Pokud například váš kód prochází řadou listů, následující příkaz zobrazí název a typ aktivního listu:
MsgBox ActiveSheet.Name & „ “ & TypeName(ActiveSheet)
Pokud se ve vaší zprávě objeví něco neočekávaného, stiskněte Ctrl+Break a zobrazí se dialogové okno, které vám sdělí, že provádění kódu bylo přerušeno, máte čtyři možnosti:
-
Klikněte na tlačítko Pokračovat. Kód pokračuje ve vykonávání.
-
Klepněte na tlačítko Konec. Poprava se zastaví.
-
Klepněte na tlačítko Debug. VBE přejde do režimu ladění.
-
Klepněte na tlačítko Nápověda. Obrazovka nápovědy vám sdělí, že jste stiskli Ctrl+Break. Jinými slovy, není to příliš užitečné.
Stisknutím Ctrl+Break zastavíte provádění kódu a získáte několik možností.
Pokud vaše klávesnice nemá klávesu Break, zkuste stisknout Ctrl+ScrollLock.
Při ladění kódu můžete často používat funkce MsgBox. Jen se ujistěte, že jste je odstranili poté, co identifikujete a opravíte problém.
Vkládání příkazů Debug.Print
Jako alternativu k použití funkcí MsgBox v kódu můžete vložit jeden nebo více dočasných příkazů Debug.Print. Tyto příkazy použijte k vytištění hodnoty jedné nebo více proměnných v okně Immediate. Zde je příklad, který zobrazuje hodnoty tří proměnných:
Debug.Print LoopIndex, CellCount, MyVal
Všimněte si, že proměnné jsou odděleny čárkami. Jediným příkazem Debug.Print můžete zobrazit tolik proměnných, kolik chcete.
Debug.Print odešle výstup do okna Immediate, i když je toto okno skryté. Pokud není okno Okamžité VBE viditelné, stiskněte Ctrl+G (nebo zvolte Zobrazit → Okamžité okno). Zde je nějaký výstup v okně Immediate.
Příkaz Debug.Print odešle výstup do okna Immediate.
Na rozdíl od MsgBox příkazy Debug.Print nezastaví váš kód. Takže musíte sledovat okno Immediate, abyste viděli, co se děje.
Po odladění kódu nezapomeňte odebrat všechny příkazy Debug.Print. Dokonce i velké společnosti jako Microsoft občas zapomenou odstranit svá prohlášení Debug.Print. V několika předchozích verzích Excelu se při každém otevření doplňku Analysis ToolPak v okně Immediate zobrazilo několik podivných zpráv. Tento problém byl nakonec vyřešen v aplikaci Excel 2007.
Pomocí ladicího programu VBA
Návrháři Excelu jsou důvěrně obeznámeni s konceptem chyb. V důsledku toho Excel obsahuje sadu nástrojů pro ladění, které vám mohou pomoci opravit problémy v kódu VBA.