Obsah
Keďže už viete, ako vytvárať UDF (a dúfam, že ste ich aj vyskúšali použiť v programe Excel), poďme trochu hlbšie a pozrime sa, čo sa dá robiť v prípade, že vaša používateľom definovaná funkcia nefunguje.
Na vyriešenie niektorých problémov pri vytváraní vlastnej funkcie budete pravdepodobne potrebovať spustiť ladenie. Potom si môžete byť istí, že funkcia funguje správne.
Preskúmame nasledujúce techniky ladenia:
Pri vytváraní vlastnej funkcie vždy existuje možnosť, že urobíte chybu. Vlastné funkcie sú zvyčajne pomerne zložité. A nie vždy začnú hneď správne fungovať. Vzorec môže vrátiť nesprávny výsledok alebo chybu #VALUE! Na rozdiel od štandardných funkcií programu Excel sa nezobrazia žiadne iné hlásenia.
Existuje spôsob, ako prejsť vlastnú funkciu krok za krokom a skontrolovať, ako funguje každý jej príkaz? Iste! Na to sa používa ladenie.
Ponúknem vám niekoľko spôsobov ladenia vašej vlastnej funkcie, aby ste si mohli vybrať ten, ktorý vám vyhovuje.
Ako príklad použijeme vlastnú funkciu GetMaxBetween z jedného z našich predchádzajúcich článkov, ktorý vypočíta maximálne číslo v zadanom rozsahu hodnôt:
Funkcia 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 FunctionArgumentmi funkcie sú rozsah buniek, do ktorých sa zapisujú čísla, ako aj horná a dolná hranica hodnôt.
Umiestnenie funkcie MsgBox na dôležité miesta
Aby ste mohli monitorovať vykonávanie výpočtov, môžete na obrazovke na správnych miestach zobraziť hodnoty najdôležitejších premenných. To môžete urobiť pomocou vyskakovacích dialógových okien.
MsgBox je dialógové okno, ktoré môžete použiť na zobrazenie nejakej správy používateľovi.
Syntax funkcie MsgBox je podobná syntaxi iných funkcií VBA:
MsgBox(prompt [, buttons] [, title] [, helpfile, context])výzva je povinný argument. Obsahuje správu, ktorá sa zobrazí v dialógovom okne. Môže sa použiť aj na zobrazenie hodnôt jednotlivých premenných.
Všetky ostatné argumenty sú nepovinné.
[ tlačidlá ] - určuje, ktoré tlačidlá a ikony sa zobrazia v MsgBox Ak napríklad použijeme možnosť vbOkOnly , potom len OK Zobrazí sa tlačidlo. Aj keď ste tento argument vynechali, toto tlačidlo sa použije ako predvolené.
[ názov ] - tu môžete zadať názov okna správy.
Prejdime od slov k praxi a začnime ladiť. Ak chcete zobraziť správu, pridajte do kódu nasledujúci riadok GetMaxBetween používateľom definovaná funkcia pred Prípad Iný prevádzkovateľ:
MsgBox vMax,, "Count -" & iTu je výsledok, ktorý dostaneme:
Funkcia 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) Koniec funkciePoužitie vMax premennej v dialógovom okne uvidíme, ktoré čísla spĺňajú kritériá výberu, aby sme mohli vybrať najväčšie z nich. Výrazom "Count -" & I v titulkovom riadku označíme, koľko čísel sme už vybrali na určenie maximálnej hodnoty. Počítadlo sa bude zvyšovať s každou novou hodnotou.
Po nastavení nášho UDF použijeme na rozsah dátumov nasledujúci vzorec:
= GetMaxBetween (A1:A6,10,50)
Po stlačení tlačidla Enter sa zobrazí správa ako na obrázku nižšie:
Toto je prvé číslo v rozsahu A1: A6, ktoré spĺňa kritériá: väčšie ako 10, ale menšie ako 50.
Po kliknutí na tlačidlo OK sa zobrazí druhá správa s číslom 14. Ostatné čísla nezodpovedajú kritériám výberu. Funkcia preto skončí a vráti najväčšiu z dvoch hodnôt, 17.
Stránka MsgBox Funkciu možno použiť na najdôležitejších miestach vašej vlastnej funkcie na kontrolu toho, ako sa menia hodnoty jednotlivých premenných. Polia správ môžu byť veľmi užitočné, keď máte rozsiahlu funkciu a veľa výpočtov. V takom prípade sa vám bude ľahko určovať, v ktorej časti kódu sa vyskytla chyba.
Určenie bodov zastavenia a postupné vykonávanie
Do kódu funkcie môžete pridať body prerušenia, v ktorých sa vykonávanie kódu zastaví. Môžete tak sledovať proces výpočtu krok za krokom. Pritom môžete sledovať, ako sa menia hodnoty premenných.
Ak chcete pridať bod prerušenia, umiestnite kurzor na riadok obsahujúci príkaz, v ktorom sa chcete pozastaviť. Potom kliknite pravým tlačidlom myši a vyberte položku Debug -> Toggle Breakpoint alebo jednoducho stlačte kláves F9 . Môžete tiež kliknúť na požadované miesto vo vertikálnej sivej oblasti naľavo od kódu funkcie.
Zobrazí sa červený kruh, ako vidíte na snímke obrazovky nižšie. Riadok kódu, v ktorom sa výpočet zastaví, je zvýraznený červenou farbou.
Teraz sa pri spustení funkcie otvorí okno editora VBA. Kurzor bude umiestnený na mieste, kde ste zastavili.
Ak kurzorom myši prejdete nad ktorúkoľvek premennú v kóde funkcie, uvidíte jej aktuálnu hodnotu:
Stlačením tlačidla F5 pokračujte vo výpočte.
Poznámka. Po vytvorení bodu prerušenia môžete začať sledovať priebeh výpočtov krok za krokom. Ak stlačíte tlačidlo F8, vykoná sa len jeden ďalší riadok kódu VBA. Žltá čiara so šípkou sa tiež presunie na poslednú pozíciu vykonaného kódu.
Keďže vykonávanie funkcie je opäť pozastavené, môžete si pomocou kurzora myši zobraziť aktuálne hodnoty všetkých premenných funkcie.
Ďalšie stlačenie klávesu F8 nás posunie o krok vpred. Takže môžete stláčať kláves F8 až do konca výpočtu. Alebo stlačením klávesu F5 pokračovať vo výpočte až do ďalšieho bodu prerušenia.
Ak dôjde k chybe, kurzor sa zastaví na mieste v kóde, kde došlo k chybe. A zobrazí sa aj vyskakovacie chybové hlásenie. Vďaka tomu je možné ľahko určiť príčinu problému.
Zadané body prerušenia sa budú uplatňovať, kým súbor nezatvoríte. Keď ho znovu otvoríte, budete ich musieť nastaviť znova. Nie je to najpohodlnejší spôsob, nemyslíte?
Tento problém sa však dá vyriešiť. Vložte Zastavte do kódu funkcie na potrebných miestach a môžete zastaviť vykonávanie programu rovnakým spôsobom ako pri použití bodov prerušenia.
Keď VBA narazí na Zastavte príkaz, zastaví sa vykonávanie programu a počká na vašu akciu. Skontrolujte hodnoty premenných a potom pokračujte stlačením klávesu F5.
Alebo stlačte kláves F8, aby ste funkciu vykonali krok za krokom, ako je popísané vyššie.
Stránka Zastavte príkaz je súčasťou programu, a preto sa neodstraňuje, ako je to v prípade bodu prerušenia. Po skončení ladenia ho odstráňte sami. Alebo ho premeňte na komentár tak, že pred neho vložíte jednoduchú úvodzovku (').
Ladenie pomocou operátora Debug.Print
Môžete umiestniť Debug.Print v kóde funkcie na správnom mieste. To je užitočné na kontrolu hodnôt premenných, ktoré sa cyklicky menia.
Príklad výkonu Debug.Print môžete vidieť na nasledujúcom obrázku.
Vyhlásenie Debug.Print i, vMax vypíše hodnoty a ich poradové čísla.
V okne Immediate vidíme dve čísla (17 a 14) z vybraného rozsahu, ktorý zodpovedá nastaveným hraniciam a spomedzi ktorých sa vyberie maximum. Číslice 1 a 2 znamenajú, že funkcia ukončila 2 cykly, v ktorých boli vybrané čísla. Vidíme hodnoty najdôležitejších premenných, podobne ako predtým pri MsgBox . Ale to nezastavilo funkciu.
Volanie funkcie z procedúry
Používateľom definovanú funkciu môžete zavolať nie z bunky pracovného hárka, ale z procedúry. V tomto prípade sa všetky chyby zobrazia v okne Editora jazyka Visual Basic.
Tu je uvedený spôsob, ako môžete zavolať používateľom definovanú funkciu GetMaxBerween z procedúry:
Sub Test() Dim x x = GetMaxBetween(Range ("A1:A6" ), 10, 50) MsgBox(x) End SubUmiestnite kurzor kdekoľvek v kóde a stlačte kláves F5 . Ak vo funkcii nie je chyba, zobrazí sa vyskakovacie okno s výsledkom výpočtu.
V prípade chyby sa v editore VBA zobrazí príslušná správa. Výpočet sa zastaví a riadok kódu, v ktorom sa vyskytla chyba, sa zvýrazní žltou farbou. Môžete tak ľahko zistiť, kde a prečo sa vyskytla chyba.
To je všetko. Teraz ste vytvorili vlastný doplnok, pridali ho do programu Excel a môžete v ňom používať UDF. Ak chcete používať ďalšie UDF, stačí napísať kód v module doplnku v editore VBA a uložiť ho.
To je pre dnešok všetko. Venovali sme sa rôznym spôsobom ladenia vlastných funkcií a naučili sme sa ich používať v zošite. Pevne dúfame, že vám tieto pokyny pomôžu. Ak máte nejaké otázky, napíšte ich do komentárov k tomuto článku.