V předchozích dílech jsme pokračovali v projektu, kde postupně zdokonalujeme práci s uživatelskými funkcemi. Když vám v Excelu nějaká funkce chybí, budete si umět poradit skoro se vším. Minule jsme v základním provedení poznali VBA funkci Environ, která dává k dispozici údaje o softwarovém prostředí, na němž Excel běží. Využili jsme ji ke kontrole, zda uživatel, který formulář vyplňuje, je nějak spřízněn s osobou, která je přihlášena k počítači.
Podkladová úloha: Pracujeme se sešitem, v němž je formulář, jejž je třeba vyplňovat. Potíž s položkou „Na počítači přihlášen“ je ovšem v tom, že když si daný soubor otevře někdo na svém počítači, vyhodnotí funkce Kontrola_Username toho jiného člověka, a ne stav, kdy k vyplňování došlo. Stáhněte si sešit 2012-11 UD-funkce.xlsm z odkazu na konci článku. Sešit otevřete. Uvidíte zhruba toto:
Je to „Nepřesvědčivé“ proto, že na počítači jsem přihlášen já pod svým jménem. Ale snadno si lze představit situaci, kdy předseda klubu se bude jmenovat František, a jemu tam vyběhne „Pečlivý“. Jak z takové situace ven?
Tady vidíme určité omezení uživatelských funkcí. Nemohou změnit žádnou buňku v sešitu, ale pouze hodnotu, kterou vracejí do Excelu. A tu vrátí samozřejmě při změně okolností jinou, než když se to vyplňovalo.
Můžeme se s tím vypořádat více způsoby. Jeden z nich je spuštění nějakého makra při vzniku vhodné události. Jiný je třeba export vyplněného formuláře se změnou vzorců na hodnoty.
My se dnes pokusíme o první řešení. Funkci už máme hotovou, takže zkusíme vyvolat makro při události změny v buňce B22, kam uživatel bude něco vyplňovat. Jakmile…