dnes je 21.11.2024

Input:

Excel 2007: Makra — VBA — Ladění programu – 4. část

26.5.2011, , Zdroj: Verlag Dashöfer

V předcházejících článcích jsme si vytvořili příklad, na kterém jsme se začali seznamovat s ladícími prostředky VBE. Dnes budeme tento nesmírně důležitý nástroj dále zkoumat a pozornost zaměříme na Watch příkaz.

Podkladová úloha: V dílu 1 jsme strojili makro, které ladíme. Zvolili jsme si jednoduchou úlohu, kde na listu jsou řádky, a pokud se v kterékoli buňce v řádku objeví slovo „Celkem“, tak buňku v tomto řádku a sloupci naformátujeme tučnou červenou kurzívou. A naopak, pokud tam nikde „Celkem“ nebude, makro zajistilo, aby nebyla ani tučně ani kurzívou, a byla černě.

Stáhněte si sešit 2011-11 Ladeni_programu.xlsm z odkazu na konci článku. Sešit otevřete. Uvidíte zhruba toto:

V ladění jsme zatím využili krokování pomocí <F8> a <Shift+F8>, Breakpoint a příkaz Debug.Print ve spojení s okénkem Immediate.

Dnes si doplníme ladící prostředky o Watch. Představme si, že začátek makra máme zkontrolován, ale nějak nás zlobí nalezení slova „celkem“. Ačkoli máme jistotu, že v databázi takové slovo vidíme, makro svou práci neprovede.

Abychom si to demonstrovali na reálné situaci, zadejte v Excelu hledání slova Karel, ale zvolte podrobnosti a vyberte volbu „Pouze celé buňky“ – viz obrázek:

Necháme Najít další a dialogové okno zavřeme. Nyní spustíme makro a shledáme, že řádek 6  s ID  50 není červený, ačkoli obsahuje slovo „Celkem“.

Nyní se pokusíme nastrojit past, kterou odchytíme, v čem je chyba. Pro zjednodušení prvního pokusu si chceme počíhat na dění na řádku 6.

Otevřeme VBE a zobrazíme rutinu, kde se pracuje s hledáním slova „celkem“. Viz obrázek:

Využijeme schopností VBE, a předem selektujeme výraz „ActiveCell.Row“. Pak vyvoláme menu Debug a v něm „Add Watch“. (Podobně lze využít pravé tlačítko myši na selektovaném textu). Zobrazí se:

Hodnoty nabízené v dialogu již obsahují důležité podrobnosti, především „ActiveCell.Row“ a název procedury „ZjistiCelkem“. K tomu, aby nám „kukátko“ zastavilo na řádku 6, upravíme výraz a zvolíme „Break When Value Is True“:

Nyní se vrátíme do Excelu a spustíme např. pomocí Alt+F8 makro

Makro proběhne plnou rychlostí až do místa, kam jsme nastavili Watch, a zde se zastaví a čeká na naši akci:

Možná si kladete otázku, proč se nezastavilo už při přesunutí selektoru ve volající rutině? Protože Watch je nastaven tak, aby reagoval jen v proceduře „ZjistiCelkem“.  Ale hned při vstupu do ní zjistí, že už je selektor nastaven na 6.řádku, což je mimo

Nahrávám...
Nahrávám...