dnes je 13.12.2024

Input:

Excel 2007: Makra - VBA - Funkce k vyčištění dat - 2. část

5.1.2011, , Zdroj: Verlag Dashöfer

V předchozím článku jsme sestrojili uživatelskou funkci, jejíž pomocí upravujeme data, získaná z internetu, a ta pracuje přímo z nitra Excelu. Dnes se zaměříme na to, jak si z nitra takové funkce poslat zprávu, když se něco nedaří.

Původní úloha zněla: V sešitě na listu „Data“ budeme mít blok s  daty, která obsahují kód výrobku, název výrobku a popis. Ale popis jsme získali z nějakých webových stránek, a obsahuje různé http a XML  příkazy, jichž se potřebujeme zbavit.

Mohli jsme postupovat tak, že jsme přímo v Excelu pustili povel Nahradit a vždycky  výrazy typu <B>, </B>,…, <STRONG>, </STRONG> nahrazovat prázdným znakem. To by vyžadovalo mnohokrát opakované vyhledávání a nahrazování. Pokud by nás čekala podobná práce vícekrát za měsíc, určitě bychom uvítali, kdyby se našel nějaký účinnější způsob. Ten jsme našli v uživatelské funkci „Vycisti_http“, která jsme si napsali ve VBA.

Stáhněte si sešit 11_1_Vycisteni_dat.xlsm z odkazu na konci článku. Bude obsahovat komentář k druhé části funkce, jež čištění dat organizuje. Sešit otevřete.

Otevřete si VBE (editor Visual Basicu) např. Alt+<F11> a zobrazte si funkci  „Vycisti_http“ . Viz obrázek:

Funkci jsme v minulém dílu vyzkoušeli, a na běžných příkladech fungovala. Ovšem šedá je každá teorie, zatímco zelený je strom života. Ve světě kolem nás se vyskytuje spousta věcí, které se chovají trošku jinak, než předpokládáme. Pokud si zlomyslné věci dovolí být otřesně odlišné, obvykle si toho rychle všimneme a opravíme. Ale daleko zákeřnější jsou drobné nesoulady, které snadno přehlédneme, ale zato si jich s nelibostí všimne ředitel podniku, v němž působíme, nebo nedej Bože důležitý zákazník.  Podívejte se na následující obrázek:

Všimněte si v buňce C4 „lichého“ znaku „>“. Není důležité, kde se v životě takovéto zrady berou, ale Murphyho zákon neúprosně vítězí. A když na tyto situace nebudeme při programování myslet, vymstí se nám to.

„Proč to neuděláme metodou MsgBox?“, zeptá se  čtenář, který úspěšně zvládl podzimní lekce VBA v tomto seriálu. Tak si to vyzkoušíme. Do příslušného místa vložíme hlášení. Měli byste vidět něco jako na následujícím obrázku:

Pokud u zpracování sedíme sami, a dáváme pozor, upozorní nás takové hlášení, že není vše v pořádku. Ovšem stačí odmáčknout „OK“, a už nevíme pořádně, že tam byl nějaký problém. Výsledný řetězec je nenápadně špatně.  A to je právě ta výše zmíněná nebezpečná situace.

Problém se zařazením uživatelské funkce, která se může kopírováním dostat na stovky řádků , vyžaduje nějaký jiný způsob hlášení o chybách, než umí MsgBox. A co je ještě horší, pokud je hodně vstupních řetězců špatně, můžeme odmačkávat takové hlášky několik minut, než Excel proběhne všechny.

Seznámíme se s jiným řešením, jak se s chybami v datech poprat, a totiž z nenápadné chyby udělat chybu nápadnou.

V řádku 4 si všimněte slova „CHYBA!“ na začátku řetězce. Viz obrázek

Důvod, proč se to tam objevilo, si probereme nyní.  Ve VBA můžeme napsat např. toto:

Else    'chybný řetězec - vyznačíme uživateli problém

Vycisti_http = "CHYBA! " & Vycisti_http

Exit Function

V mluvené řeči je tučným písmem ve VBA řečeno: „Před řetězec znaků, jak jsi jej až sem zpracovala, zařaď slovo ‚CHYBA! ‘ a přestaň řetězec dál upravovat, protože není syntakticky správně, a mohla bys napáchat víc škody, než užitku. Spoléhej na to, že uživatel si bude své dílo trochu prohlížet, a doufat, že si dá vyfiltrovat všechny věty, v nichž je slovo CHYBA na začátku. Když to neudělá, může tě, drahá funkce, hřát vědomí, že jsi udělala, co jsi rozumně mohla, abys jej

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