Obsah
Protože již víte, jak vytvářet UDF (a doufám, že jste je také vyzkoušeli použít ve svém Excelu), pojďme se podívat trochu hlouběji a zjistit, co lze dělat v případě, že vaše uživatelsky definovaná funkce nefunguje.
Abyste mohli vyřešit některé problémy při vytváření vlastní funkce, budete pravděpodobně potřebovat spustit ladění. Pak si můžete být jisti, že funkce funguje správně.
Prozkoumáme následující techniky ladění:
Když vytvoříte vlastní funkci, vždy existuje možnost, že uděláte chybu. Vlastní funkce jsou obvykle poměrně složité. A ne vždy začnou hned správně fungovat. Vzorec může vrátit nesprávný výsledek nebo chybu #VALUE! Na rozdíl od standardních funkcí Excelu se nezobrazí žádné další hlášení.
Existuje způsob, jak projít vlastní funkci krok za krokem a zkontrolovat, jak fungují jednotlivé příkazy? Jistě! K tomu slouží ladění.
Nabídnu vám několik způsobů ladění vlastní funkce, abyste si mohli vybrat ten, který vám vyhovuje.
Jako příklad použijeme vlastní funkci GetMaxBetween z jednoho z našich předchozích článků, který vypočítá maximální číslo v zadaném rozsahu hodnot:
Funkce GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.Count) For Each NumRange In rngCells vMax = NumRange Select Case vMax Case MinNum + 0.01 To MaxNum - 0.01 arrNums(i) = vMax i = i + 1 Case Else GetMaxBetween = 0 End Select Next NumRange GetMaxBetween = WorksheetFunction.Max(arrNums) End FunctionArgumenty funkce jsou rozsah buněk, do kterých se zapisují čísla, a horní a dolní hranice hodnot.
Umístění funkce MsgBox na důležitá místa
Abyste mohli sledovat provádění výpočtů, můžete na obrazovce na správných místech zobrazit hodnoty nejdůležitějších proměnných. To lze provést pomocí vyskakovacích dialogových oken.
MsgBox je dialogové okno, které můžete použít k zobrazení nějaké zprávy uživateli.
Syntaxe funkce MsgBox je podobná jako u jiných funkcí VBA:
MsgBox(prompt [, buttons] [, title] [, helpfile, context])výzva je povinný argument. Obsahuje zprávu, která se zobrazí v dialogovém okně. Lze jej také použít k zobrazení hodnot jednotlivých proměnných.
Všechny ostatní argumenty jsou nepovinné.
[ tlačítka ] - určuje, která tlačítka a ikony se budou zobrazovat v okně MsgBox Pokud například použijeme možnost vbOkOnly , pak pouze OK Tlačítko se zobrazí, i když jste tento argument vynechali, bude toto tlačítko použito ve výchozím nastavení.
[ název ] - zde můžete zadat název pole zprávy.
Přejděme od slov k praxi a začněme ladit. Chcete-li zobrazit zprávu, přidejte do kódu následující řádek GetMaxBetween uživatelsky definovaná funkce před Případ Jiný provozovatel:
MsgBox vMax,, "Count -" & iZde je výsledek:
Funkce GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.Count) For Each NumRange In rngCells vMax = NumRange Select Case vMax Case MinNum + 0.01 To MaxNum - 0.01 arrNums(i) = vMax i = i + 1 MsgBox vMax,, "Count -" & i Case Else GetMaxBetween = 0 End Select Next NumRange GetMaxBetween =WorksheetFunction.Max(arrNums) Konec funkcePoužití vMax proměnné v dialogovém okně uvidíme, která čísla splňují kritéria pro výběr, abychom mohli vybrat největší z nich. Výrazem "Count -" & I v titulkovém řádku označíme, kolik čísel jsme již vybrali pro určení maximální hodnoty. Počítadlo se bude zvyšovat s každou novou hodnotou.
Jakmile máme nastavenou naši UDF, použijeme na rozsah dat níže uvedený vzorec:
= GetMaxBetween (A1:A6,10,50)
Po stisknutí tlačítka Enter se zobrazí zpráva jako na obrázku níže:
Jedná se o první číslo v rozsahu A1: A6, které splňuje kritéria: větší než 10, ale menší než 50.
Po kliknutí na tlačítko OK se zobrazí druhá zpráva s číslem 14. Ostatní čísla neodpovídají kritériím výběru. Funkce proto skončí a vrátí největší z obou hodnot, tedy 17.
Na stránkách MsgBox Funkci lze použít na nejdůležitějších místech vaší vlastní funkce, abyste mohli kontrolovat, jak se mění hodnoty jednotlivých proměnných. Pole zpráv mohou být velmi užitečná, pokud máte rozsáhlou funkci a hodně výpočtů. V takovém případě budete moci snadno určit, ve které části kódu došlo k chybě.
Určete body zastavení a proveďte krok za krokem
Do kódu funkce můžete přidat body přerušení, ve kterých se provádění kódu zastaví. Můžete tak sledovat postup výpočtu krok za krokem. Přitom můžete sledovat, jak se mění hodnoty proměnných.
Chcete-li přidat bod přerušení, umístěte kurzor na řádek obsahující příkaz, který chcete pozastavit. Poté klikněte pravým tlačítkem myši a vyberte možnost Debug -> Přepnout bod přerušení nebo stačí stisknout klávesu F9 . Můžete také kliknout na požadované místo ve svislé šedé oblasti vlevo od kódu funkce.
Objeví se červené kolečko, jak vidíte na obrázku níže. Řádek kódu, kde bude výpočet zastaven, je zvýrazněn červeně.
Nyní se při spuštění funkce otevře okno editoru VBA. Kurzor bude umístěn v místě, kde jste funkci zastavili.
Pokud najedete kurzorem myši na některou z proměnných v kódu funkce, zobrazí se její aktuální hodnota:
Stisknutím klávesy F5 pokračujte ve výpočtu.
Poznámka: Po zadání bodu přerušení můžete začít sledovat průběh výpočtů krok za krokem. Pokud stisknete tlačítko F8, provede se pouze jeden další řádek kódu VBA. Žlutá čára se šipkou se také přesune na poslední provedenou pozici kódu.
Protože je provádění funkce opět pozastaveno, můžete pomocí kurzoru myši zobrazit aktuální hodnoty všech proměnných funkce.
Dalším stiskem klávesy F8 se posuneme o krok vpřed. Můžete tedy stisknout klávesu F8 až do konce výpočtu. Nebo stiskem klávesy F5 pokračovat ve výpočtu až do dalšího bodu přerušení.
Pokud dojde k chybě, kurzor se zastaví v místě kódu, kde k chybě došlo. A zobrazí se také vyskakovací chybová zpráva. Díky tomu lze snadno určit příčinu problému.
Zadané body přerušení budou platit, dokud soubor nezavřete. Když ho znovu otevřete, budete je muset nastavit znovu. Není to nejpohodlnější metoda, nemyslíte?
Tento problém však lze vyřešit. Vložte a Zastavte do kódu funkce na potřebných místech a můžete zastavit provádění programu stejným způsobem jako při použití bodů přerušení.
Když VBA narazí na Zastavte příkaz, zastaví se provádění programu a počká na vaši akci. Zkontrolujte hodnoty proměnných a pokračujte stisknutím klávesy F5.
Nebo stiskněte klávesu F8 a proveďte funkci postupně, jak je popsáno výše.
Na stránkách Zastavte příkaz je součástí programu, a proto se neodstraňuje, jako je tomu v případě bodu přerušení. Až skončíte s laděním, odstraňte jej sami. Nebo jej změňte na komentář tak, že před něj vložíte jednoduchou uvozovku (').
Ladění pomocí operátoru Debug.Print
Můžete umístit Debug.Print v kódu funkce na správném místě. To je užitečné pro kontrolu hodnot proměnných, které se cyklicky mění.
Příklad výkonu nástroje Debug.Print můžete vidět na snímku obrazovky níže.
Prohlášení Debug.Print i, vMax vypíše hodnoty a jejich pořadová čísla.
V okně Immediate vidíme dvě čísla (17 a 14) z vybraného rozsahu, který odpovídá nastaveným mezím a mezi nimiž bude vybráno maximum. Číslice 1 a 2 znamenají, že funkce dokončila 2 cykly, v nichž byla čísla vybrána. Vidíme hodnoty nejdůležitějších proměnných, stejně jako jsme to dříve udělali u funkce MsgBox To však funkci nezastavilo.
Volání funkce z procedury
Uživatelem definovanou funkci můžete zavolat nikoli z buňky pracovního listu, ale z procedury. V takovém případě se všechny chyby zobrazí v okně Editoru jazyka Visual Basic.
Zde je uveden způsob, jak lze z procedury zavolat uživatelsky definovanou funkci GetMaxBerween:
Sub Test() Dim x x = GetMaxBetween(Range ("A1:A6" ), 10, 50) MsgBox(x) End SubUmístěte kurzor kamkoli do kódu a stiskněte klávesu F5 . Pokud ve funkci není chyba, zobrazí se vyskakovací okno s výsledkem výpočtu.
V případě chyby se v editoru VBA zobrazí odpovídající zpráva. Výpočet se zastaví a řádek kódu, ve kterém došlo k chybě, bude zvýrazněn žlutě. Můžete tak snadno zjistit, kde a proč došlo k chybě.
To je vše. Nyní jste vytvořili vlastní doplněk, přidali jej do aplikace Excel a můžete v něm používat UDF. Pokud chcete používat další UDF, stačí napsat kód v modulu doplňku v editoru VBA a uložit jej.
To je pro dnešek vše. Probrali jsme různé způsoby ladění vlastních funkcí a naučili se je používat v sešitě. Pevně doufáme, že vám tyto pokyny pomohou. Pokud máte nějaké dotazy, napište je do komentářů k tomuto článku.