dnes je 18.4.2024

Input:

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

9.6.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 ještě ponecháme na Watch příkazu, s nímž jsme se seznámili v předchozím díle.

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-12 Ladeni_programu.xlsm z odkazu na konci článku. Sešit otevřete. Uvidíte zhruba toto:

Minule jsme poprvé použili příkaz Watch. Rozdíl oproti BreakPointu spočíval především v tom, že místo, kde se program zastaví, je nastaveno z pohledu VBA, nikoli naším přímým rozkazem „Tady zastav!“. Asi tak, že řekneme VBA například: „Až bude tahle proměnná větší než 42, tak přeruš, abych se na to mohl podívat!“.

Posledně jsme nastrojili nastavení dialogovém okně  „Hledat“ tak, že vyhledával jen při shodě celé buňky s hledaným textem. A protože je dialogové okno Hledat v Excelu jen jedno, pamatuje si nastavení, dokud ho někde nezměníme. V tom spočívala zrada původní verze programu.  Opravili jsme to doplněním parametru LookIn:=XlPart do metody „Find“.

Vadné místo jsme našli tak, že jsme si nastavili Watch s podmínkou ActiveCell.row=5.

Tentokrát si nachystáme chybu jiného typu. Nejprve zobecníme naše makro tak, aby hledalo ne zrovna slovo „celkem“, ale slovo, které uživatel zadá. (Může zadat i „celkem“). A budeme chtít, aby si Excel to slovo pamatoval i po uzavření souboru.

Vytvoříme tedy nový list s názvem „Param“ a v něm sestrojíme pojmenovanou buňku „Hledane_slovo“. Viz obrázek:

Nyní budeme předpokládat, že poučený uživatel při potřebě hledat jiné slovo, např. slovo „vypůjčen“ přepne na list Param, a hodnotu změní. My si nejprve doprogramujeme práci s novým uspořádáním.

'Set pomRng = Rows(ActiveCell.Row).Find("celkem", LookAt:=xlPart)   'stará verze

Set pomRng = Rows(ActiveCell.Row).Find(Range("Hledane_slovo").Value, LookAt:=xlPart)

Řekněme, že jste tohle vylepšené makro „pustili do světa“, a někdo vám volá, že to nefunguje. Že to barví všechny řádky na červeno.  Podíváte se na list „Param“ v jeho souboru a tam vidíte, že je vše správně:

Ještě se ujistíte, že za slovem „celkem“ náhodou není nějaká mezera navíc, ale prostě vám to nedává smysl. Jak je možné, že to obarvuje všechno?

Použijeme tedy Watch, a chceme sledovat proměnnou „pomRng“. Nastavíme kursor na „pomRng“ a zvolíme Debug->Add Watch. A aby nám to zastavovalo na podmínce, doplníme „is nothing“ a zvolíme „Break When

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