dnes je 29.3.2024

Input:

Excel 2007: Makra – VBA - Uživatelská funkce – 20. část

7.12.2012, , Zdroj: Verlag Dashöfer

V předchozím dílu jsme téměř ovládli položku formuláře kvůli předanému požadavku od CIA taktně zkoumat vztah uchazeče k náboženství. Ošetřili jsme počáteční stav, kdy není zvoleno nic, ale zbylo nám zobrazování více voleb v políčku C30, pokud se nevejdou do dané šířky řádků. Rovněž jsme zatím neřešili případné chyby při zpracování.

Podkladová úloha: Pracujeme se sešitem, v němž je formulář, jejž je třeba vyplňovat. Nedávno nás předseda klubu překvapil požadavkem, že CIA se obává infiltrace islámských teroristů do klubu. Požádali jej, aby součástí formuláře byly otázky nenápadně vyzvídající vztah uchazeče k náboženství. Stáhněte si sešit 2012-25 UD-funkce.xlsm z odkazu na konci článku. Sešit otevřete. Uvidíte zhruba toto:

Tato čárka znamená, že za tímto náboženstvím následuje ještě další, které však se už nevešlo do buňky při dané výšce  řádku. Buňka má sice nastaveno zalamování, takže pokud zvolíme „Formát-> Přizpůsobit šířku řádků“, řádek se rozšíří, a text bude vidět celý (To se nám nepovede, dokud list neodemkneme).

To ovšem nemůžeme požadovat ani po předsedovi, ani po uchazečích. Musí to provést makro. Využijeme staré dobré nahrávání maker, abychom získali návod, jak tu změnu řádkování provést. Zapneme nahrávání maker např. dole na liště stiskem ikony (V Office 2007, 2010 a 2013 je to velmi podobné):

Nejprve si list odemkneme. Pak stiskneme toto tlačítko, případně spustíme nahrávání přes menu Vývojář, nazveme a okomentujeme:

Poté již provedeme akci  „Formát-> Přizpůsobit šířku řádků“ a na stejném místě, kde jsme nahrávání makra spouštěli, najdeme modrý čtvereček, jehož stiskem nahrávání ukončíme. Pak <Alt+F11> přejdeme do VBE:

Ale jak tuto instrukci zapojíme? Co když aktivní buňka bude ve chvíli výpočtu UDF funkce v jiném řádku? Můžeme vůbec zjistit, na kterém řádku se vzorec nachází?

Zde zkusíme tedy nejdříve první myšlenku. Využijeme dosud nezmíněné možnosti UDF funkcí. Evaluator (jádro Excelu, které chytře přepočítává buňky při vzájemných závislostech vzorců) při procházení buněk, jež musí přepočítat,  musí „hlásit“ aplikaci, která jej vyvolala, buňky, z nichž požadavek vzešel. A tou je v našem případě Excel. Pokud zadáme Application.Caller, vrátí Excel adresu buňky, která funkci vyvolala. Můžeme toto řešení vyzkoušet (Poznámka: Původní znění UDF funkce najdete pod názvem

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