dnes je 12.10.2024

Input:

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

22.6.2012, , Zdroj: Verlag Dashöfer

V předchozích dílech jsme pokračovali v projektu, kde postupně zdokonalujeme práci s uživatelskými funkcemi. Minule jsme začali tvořit funkci Zodiac, která vyhodnocuje vztah uchazeče ke znamením zvěrokruhu, jak požadoval předseda klubu. Nicméně funkce nám vrátila výsledek #HODNOTA!. Dnes to musíme rozluštit.

Podkladová úloha: Pracujeme se sešitem, v němž je formulář, jejž je třeba vyplňovat. Posledně nás předseda klubu překvapil požadavkem, že chce posuzovat znamení zvěrokruhu, v němž se uchazeč narodil. Stáhněte si sešit 2012-13 UD-funkce.xlsm z odkazu na konci článku. Sešit otevřete. Uvidíte zhruba toto:

Předně si ujasněme, že známé hlášky z ladění programu ve VBA při zapojení kódu, jako uživatelské funkce, se nemusejí konat. Místo toho funkce při nárazu na neošetřenou chybu jednoduše skončí svou činnost a vrátí chybovou hodnotu. Pak především nevíme, v čem vlastně Excel vidí problém, a to ani při krokování pomocí <F8>. Proto si raději sestavíme ladící subrutinu, z níž funkci zavoláme:

Sub test_Zodiak()

Debug.Print Zodiak(Range("B8").Value, Range("zodiak"), "Kozoroh")

End Sub

Po jejím spuštění uvidíme toto:

První podezření padá na to, zda funkce při stejných parametrech, vyvolaná z Excelu, nevrátí rovněž chybu. To jste měli posledně za domácí úkol. Proveďme si to:

Takže to nevypadá jako chyba v logice vyhledávácí funkce.

Zde přichází na řadu občasné trochu rozdílné vnímání hodnot na straně Excelu a na straně VBA. Protože 3 argumenty jsou u POZVYHLEDAT(co;prohledat;[shoda]), a „prohledat“ je Range, a „shoda“ je konstanta, padá podezření na „co“, které je typu Variant. “Co“ předáváme z VBA jako proměnnou typu Date, avšak datum se možná konvertuje do Variant jinak, než očekáváme. Zkusíme tedy hledané datum konvertovat

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