Tento článek bychom mohli také nazvat „Záludnosti při záznamu maker, aneb na co si musíme dát pozor".
Účelem článku je seznámit se s různými způsoby záznamu maker, přesněji řečeno poznat, jak způsob záznamu ovlivní práci makra při jeho spuštění.
Absolutní a relativní odkaz
S rozlišením absolutního a relativního odkazu jsme se již setkali v kapitole „Absolutně a relativně odkazované makro". Nyní si tuto problematiku probereme do hloubky včetně rozboru kódu, který při záznamu makra vznikne.
Otevřeme si sešit 4_3_5_ruzne_zaznamy.xls a zobrazíme první list Tvorba makra. Nejprve vyzkoušíme rozdíl mezi oběma odkazy na nejjednodušší možné akci: práci s jedinou buňkou.
Postavíme kurzor do buňky B2 a příkazem Nástroje - Makro - Záznam nového makra spustíme záznam prvního makra (nazveme je „Absolutní1"). V zobrazeném panelu zkontrolujeme, že je relativní odkaz vypnutý (druhé tlačítko v panelu není zapnuté), do buňky B2 zapíšeme nějaký údaj a záznam makra ukončíme.
Vymažeme obsah buňky B2 a záznam stejné akce makrem Relativní1 provedeme ještě jednou s tím rozdílem, že nyní zapneme relativní záznam.
Nyní obě makra vyzkoušíme. Postavíme kurzor do jakékoliv buňky kromě B2 a spustíme nejprve makro Relativní1 s relativním odkazem. Údaj se zapíše do buňky, na které stojí kurzor. Údaj vymažeme a spustíme makro Absolutní1. Zjistíme, že obě makra provedla zcela totéž, tedy ani makro s absolutním odkazem nezapisuje do buňky B2, nýbrž vždy do aktivní buňky.
Nyní zkusíme zaznamenat další dvě makra, ve kterých ale budeme měnit polohu kurzoru. Náš postup bude následující:
-
postavíme kurzor do buňky B3,
-
spustíme záznam nového makra Absolutní2,
-
na panelu pro záznam vypneme relativní odkaz,
-
do buňky B3 zapíšeme jeden údaj,
-
přejdeme o řádek výš do buňky B2,
-
zapíšeme druhý údaj,
-
ukončíme záznam.
Nyní vymažeme buňky B2 a B3 a zcela stejným způsobem v těchto buňkách vytvoříme makro Relativní2 s jediným rozdílem: na panelu pro záznam zapneme opět relativní odkaz.
Vymažeme buňky B2 a B3, postavíme kurzor např. do buňky D4 a spustíme nejprve makro Relativní2. Údaje se zapíší do buněk D4 a D3.
Upozornění : Při záznamu několika maker po sobě si Excel pamatuje zapnutý nebo vypnutý relativní odkaz ze záznamu předešlého makra.
Opět vymažeme obě buňky, postavíme kurzor do buňky D4 a spustíme makro Absolutní2. První údaj se zapíše do buňky D4, ale druhý údaj do buňky B2.
Vidíme tedy, že rozdíl mezi absolutním a relativním odkazem se projevuje až při změně aktivní buňky, tedy při pohybu kurzoru po listu. V sešitu 4_3_5_ruzne_zaznamy.xls nalezneme dvě ukázková makra: Zápis_absolutně a Zápis_relativně, která si můžeme spustit nejlépe na listu Absolutní a relativní záznam. Kódy ukázkových maker v tomto sešitu nalezneme v modulu „Makra".
Obě makra provádí obdobné akce, jaké jsme si do sešitu zaznamenali v makrech Absolutní2 a Relativní2.
Rozeberme si nyní rozdíl v obou makrech podle kódu. Ve Visual Basic je makro s absolutním odkazem zaznamenáno s tímto kódem 1 :
Sub Zápis_absolutně()
ActiveCell = 10
Range("B2").Select
ActiveCell = 20
End Sub
Makro s relativním odkazem spouští tento kód:
Sub Zápis_relativně()
ActiveCell = 10
ActiveCell.Offset(-1, 0).Select
ActiveCell = 20
End Sub
Porovnáním obou kódů vidíme, že se obě makra liší ve druhém řádku, což je právě posuv kurzoru z buňky B3 na buňku B2 (v těchto buňkách byla obě makra zaznamenávána). Zatímco při použití absolutního odkazu se zřejmě jedná o příkaz typu „postav kurzor na buňku B2", u relativního záznamu druhá řádka znamená „postav kurzor do buňky ve stejném sloupci a o jednu řádku výše, než je aktivní buňka".
Můžeme tedy uzavřít: makra zaznamenaná s absolutním odkazem se liší v příkazech, zaznamenávajících výběr buněk. Jestli použijeme klávesové zkratky nebo na zvolenou buňku klepneme myší, nehraje žádnou roli.
Zbývá nám vyřešit ještě poslední problém: chceme zaznamenat makro, které bude vždy zapisovat do buněk B3 a B2, bez ohledu na pozici kurzoru při spuštění makra. Protože se rozdíl mezi absolutním a relativním záznamem projeví při pohybu kurzoru, měli bychom tedy jako první akci provést přesun na buňku, odkud má makro začít svou činnost.
Toto makro je v našem sešitu vytvořeno pod názvem Zápis_absolutně_start_na_B2. Pokud je spustíme, bude zapisovat vždy do buněk B3 a B2, bez ohledu na pozici kurzoru. Z kódu makra vidíme jasně rozdíl proti makru Zápis_absolutně :
Sub Zápis_absolutně_start_na_B2()
Range("B3").Select
ActiveCell = 10
Range("B2").Select
ActiveCell = 20
End Sub
V makru je navíc první řádek kódu, který zřejmě obstará náš skok na buňku B3.
Upozornění:…