Môžete naraziť na nejaké problémy s kódom VBA, ale ako zistíte problém? Niekedy môže váš kód VBA potrebovať nejaké ladenie. Pokračujte v čítaní a objavte štyri najbežnejšie metódy ladenia kódu Excel VBA:
-
Skúmanie kódu
-
Vloženie funkcií MsgBox na rôzne miesta vo vašom kóde
-
Vkladanie príkazov Debug.Print
-
Používanie vstavaných nástrojov na ladenie Excelu
Skúma sa váš kód
Snáď najpriamejšou technikou ladenia je jednoducho sa podrobne pozrieť na váš kód, aby ste zistili, či môžete nájsť problém. Táto metóda si samozrejme vyžaduje znalosti a skúsenosti. Inými slovami, musíte vedieť, čo robíte. Ak budete mať šťastie, chyba preskočí okamžite a vy sa plesknete do čela a poviete: "D'oh!" Keď bolesť čela ustúpi, môžete problém vyriešiť.
Všimnite si použitie slov: "Ak budete mať šťastie." Často totiž objavíte chyby, keď na programe pracujete osem hodín v kuse, sú 2 hodiny ráno a vy jazdíte na kofeíne a sile vôle. V takýchto chvíľach máte šťastie, ak môžete dokonca vidieť svoj kód, nieto nájsť chyby. Nebuďte preto prekvapení, ak jednoduché preskúmanie kódu nestačí na to, aby ste našli a odstránili všetky chyby, ktoré obsahuje.
Používanie funkcie MsgBox
Bežným problémom v mnohých programoch je, že jedna alebo viacero premenných nenadobudne hodnoty, ktoré očakávate. V takýchto prípadoch je monitorovanie premennej (premenných) počas behu kódu užitočnou technikou ladenia. Jedným zo spôsobov, ako to urobiť, je vloženie dočasných funkcií MsgBox do vašej rutiny. Napríklad, ak máte premennú s názvom CellCount, môžete vložiť nasledujúci príkaz:
MsgBox CellCount
Keď spustíte rutinu, funkcia MsgBox zobrazí hodnotu CellCount.
Často je užitočné zobraziť hodnoty dvoch alebo viacerých premenných v okne správy. Nasledujúci príkaz zobrazuje aktuálnu hodnotu dvoch premenných: LoopIndex (1) a CellCount (72), oddelené medzerou.
MsgBox LoopIndex & „ “ & CellCount
Všimnite si, že tieto dve premenné sa kombinujú s operátorom zreťazenia (&) a vkladajú medzi ne medzeru. V opačnom prípade pole správy spája dve hodnoty dohromady, takže vyzerajú ako jedna hodnota. Namiesto znaku medzery môžete použiť aj vstavanú konštantu vbNewLine. vbNewLine vloží zalomenie riadku, čím sa text zobrazí na novom riadku. Nasledujúci príkaz zobrazuje tri premenné, každú na samostatnom riadku:
Použitie okna správ na zobrazenie hodnoty troch premenných.
MsgBox LoopIndex & vbNewLine & CellCount & vbNewLine & MyVal
Táto technika nie je obmedzená na monitorovanie premenných. Počas spustenia kódu môžete použiť okno so správou na zobrazenie všetkých druhov užitočných informácií. Ak napríklad váš kód prechádza sériou hárkov, nasledujúci príkaz zobrazí názov a typ aktívneho hárka:
MsgBox ActiveSheet.Name & „ “ & TypeName(ActiveSheet)
Ak sa v okne správy zobrazuje niečo neočakávané, stlačte Ctrl+Break a zobrazí sa dialógové okno, ktoré vám oznámi, že vykonávanie kódu bolo prerušené, máte štyri možnosti:
-
Kliknite na tlačidlo Pokračovať. Kód pokračuje vo vykonávaní.
-
Kliknite na tlačidlo Koniec. Vykonávanie sa zastaví.
-
Kliknite na tlačidlo Debug. VBE prejde do režimu ladenia.
-
Kliknite na tlačidlo Pomocník. Obrazovka pomocníka vám oznámi, že ste stlačili Ctrl+Break. Inými slovami, nie je to veľmi užitočné.
Stlačením Ctrl+Break zastavíte vykonávanie kódu a získate niekoľko možností.
Ak vaša klávesnica nemá kláves Break, skúste stlačiť Ctrl+ScrollLock.
Pri ladení kódu môžete často používať funkcie MsgBox. Len sa uistite, že ste ich odstránili po identifikácii a odstránení problému.
Vkladanie príkazov Debug.Print
Ako alternatívu k používaniu funkcií MsgBox vo vašom kóde môžete vložiť jeden alebo viac dočasných príkazov Debug.Print. Tieto príkazy použite na vytlačenie hodnoty jednej alebo viacerých premenných v okne Immediate. Tu je príklad, ktorý zobrazuje hodnoty troch premenných:
Debug.Print LoopIndex, CellCount, MyVal
Všimnite si, že premenné sú oddelené čiarkami. Jediným príkazom Debug.Print môžete zobraziť toľko premenných, koľko chcete.
Debug.Print odosiela výstup do okna Immediate, aj keď je toto okno skryté. Ak sa okno Okamžité okno VBE nezobrazuje, stlačte Ctrl+G (alebo vyberte Zobraziť → Okamžité okno). Tu je nejaký výstup v okne Immediate.
Príkaz Debug.Print odošle výstup do okna Immediate.
Na rozdiel od MsgBox príkazy Debug.Print nezastavia váš kód. Takže musíte sledovať okno Immediate, aby ste videli, čo sa deje.
Po odladení kódu nezabudnite odstrániť všetky príkazy Debug.Print. Dokonca aj veľké spoločnosti ako Microsoft občas zabudnú odstrániť svoje vyhlásenia Debug.Print. V niekoľkých predchádzajúcich verziách Excelu sa pri každom otvorení doplnku Analysis ToolPak v okne Immediate zobrazilo niekoľko zvláštnych správ. Tento problém bol nakoniec opravený v Exceli 2007.
Pomocou ladiaceho nástroja VBA
Dizajnéri Excelu dôverne poznajú koncept chýb. V dôsledku toho Excel obsahuje sadu nástrojov na ladenie, ktoré vám môžu pomôcť opraviť problémy vo vašom kóde VBA.