Naučite se odpravljati napake funkcij po meri v Excelu

  • Deliti To
Michael Brown

Ker že veste, kako ustvariti UDF (in upam, da ste jih tudi že poskusili uporabiti v Excelu), se poglobimo in si oglejmo, kaj lahko storimo, če vaša uporabniško določena funkcija ne deluje.

Za rešitev nekaterih težav pri ustvarjanju funkcije po meri boste najverjetneje morali zagnati odpravljanje napak. Takrat se boste lahko prepričali, da funkcija deluje pravilno.

Raziskali bomo naslednje tehnike razhroščevanja:

    Ko ustvarite funkcijo po meri, vedno obstaja možnost, da boste naredili napako. Funkcije po meri so običajno precej zapletene. In ne začnejo vedno takoj delovati pravilno. Formula lahko vrne napačen rezultat ali napako #VALUE! Za razliko od standardnih funkcij programa Excel ne boste videli nobenih drugih sporočil.

    Ali obstaja način, da po korakih pregledamo funkcijo po meri in preverimo, kako deluje vsak njen stavek? Seveda! Za to se uporablja razhroščevanje.

    Ponudil vam bom več načinov za odpravljanje napak v funkciji po meri, da boste lahko izbrali tistega, ki vam ustreza.

    Kot primer uporabimo funkcijo po meri GetMaxBetween iz enega od prejšnjih člankov, ki izračuna največje število v določenem območju vrednosti:

    Funkcija 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 Function

    Argumenti funkcije so obseg celic, v katere se zapišejo števila, ter zgornja in spodnja meja vrednosti.

    Postavite funkcijo MsgBox na pomembna mesta

    Da bi lahko spremljali izvajanje izračunov, lahko na zaslonu na pravih mestih prikažete vrednosti najpomembnejših spremenljivk. To lahko storite z uporabo pojavnih pogovornih oken.

    MsgBox je pogovorno okno, ki ga lahko uporabite za prikaz sporočila uporabniku.

    Sintaksa funkcije MsgBox je podobna drugim funkcijam VBA:

    MsgBox(poziv [, gumbi] [, naslov] [, datoteka pomoči, kontekst])

    poziv je obvezen argument. Vsebuje sporočilo, ki se prikaže v pogovornem oknu. Uporablja se lahko tudi za prikaz vrednosti posameznih spremenljivk.

    Vsi drugi argumenti so neobvezni.

    [ gumbi ] - določa, kateri gumbi in ikone so prikazani v MsgBox Če na primer uporabimo možnost vbOkOnly , potem le V REDU Ta gumb se prikaže, tudi če ste ta argument izpustili, se privzeto uporabi.

    [ naslov ] - tukaj lahko določite naslov polja za sporočila.

    Preklopimo z besed na prakso in začnimo z odpravljanjem napak. Če želite prikazati sporočilo, v kodo programa dodajte naslednjo vrstico GetMaxBetween uporabniško opredeljena funkcija pred Primer Drugo upravljavec:

    MsgBox vMax,, "Count -" & i

    Tukaj je prikazan rezultat:

    Funkcija 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 funkcije

    Uporaba vMax spremenljivke v pogovornem oknu bomo videli, katera števila izpolnjujejo merila za izbiro, tako da bomo lahko izbrali največje med njimi. Z izrazom "Count -" & I v naslovni vrstici označimo, koliko številk smo že izbrali za določitev največje vrednosti. Števec se bo z vsako novo vrednostjo povečal.

    Ko imamo nastavljen UDF, za območje datumov uporabimo spodnjo formulo:

    = GetMaxBetween (A1:A6,10,50)

    Ko pritisnete gumb Enter, se prikaže sporočilo, kot je prikazano na spodnji sliki zaslona:

    To je prvo število v območju A1: A6, ki izpolnjuje kriterij: večje od 10 in manjše od 50.

    Ko kliknete OK, se prikaže drugo sporočilo s številko 14. Preostala števila ne ustrezajo izbirnim merilom, zato se funkcija zaključi in vrne največjo od obeh vrednosti, 17.

    Spletna stran MsgBox funkcijo lahko uporabite na najpomembnejših mestih v funkciji po meri za nadzor nad spreminjanjem vrednosti posameznih spremenljivk. Polja za sporočila so lahko zelo uporabna, kadar imate veliko funkcijo in veliko izračunov. V tem primeru boste zlahka ugotovili, v katerem delu kode je prišlo do napake.

    Določite točke zaustavitve in izvedite korak za korakom

    V kodo svoje funkcije lahko dodate prekinitvene točke, na katerih se bo izvajanje kode ustavilo. Tako lahko postopek izračuna spremljate korak za korakom. Pri tem lahko vidite, kako se spreminjajo vrednosti spremenljivk.

    Če želite dodati točko prekinitve, postavite kazalec v vrstico z izjavo, v kateri želite prekinitev. Nato kliknite z desno tipko miške in izberite Debug -> Toggle Breakpoint ali pritisnite F9 . Lahko tudi kliknete na želeno mesto na navpičnem sivem območju levo od kode funkcije.

    Prikazal se bo rdeč krog, kot je prikazano na spodnji sliki zaslona. Vrstica kode, v kateri bo izračun ustavljen, je označena z rdečo barvo.

    Zdaj se bo okno urejevalnika VBA odprlo, ko bo funkcija delovala. Kazalec bo nameščen na točki, kjer ste se ustavili.

    Če se s kazalcem miške pomaknete nad katero koli spremenljivko v kodi funkcije, lahko vidite njeno trenutno vrednost:

    Za nadaljevanje izračuna pritisnite F5.

    Opomba: Po prekinitveni točki lahko začnete spremljati potek izračunov po korakih. Če pritisnete gumb F8, se bo izvedla le ena naslednja vrstica kode VBA. Rumena črta s puščico se bo prav tako premaknila na zadnje mesto izvedene kode.

    Ker je izvajanje funkcije ponovno ustavljeno, si lahko s kazalcem miške ogledate trenutne vrednosti vseh spremenljivk funkcije.

    Naslednji pritisk na F8 nas bo popeljal en korak naprej. Tako lahko pritiskate F8 do konca izračuna. Ali pa pritisnite F5, da nadaljujete izračun do naslednje prekinitvene točke.

    Če pride do napake, se bo kazalec ustavil na točki v kodi, kjer je prišlo do napake. Prikazalo se bo tudi pojavno sporočilo o napaki. Tako boste lažje ugotovili vzrok težave.

    Določene prekinitvene točke bodo veljale, dokler datoteke ne zaprete. Ko jo boste ponovno odprli, jih boste morali znova nastaviti. To ni najbolj priročen način, se vam ne zdi?

    Vendar je to težavo mogoče rešiti. Vstavite Ustavite v kodo funkcije na potrebnih mestih, izvajanje programa pa lahko ustavite na enak način kot pri uporabi prekinitvenih točk.

    Ko VBA naleti na Ustavite bo ustavil izvajanje programa in počakal na vaše dejanje. Preverite vrednosti spremenljivk, nato pa pritisnite F5 za nadaljevanje.

    Ali pa pritisnite F8, da funkcijo izvedete po korakih, kot je opisano zgoraj.

    Spletna stran Ustavite Izjava je del programa in se zato ne izbriše, kot to velja za točko prekinitve. Ko končate z odpravljanjem napak, jo odstranite sami. Ali pa jo spremenite v komentar tako, da pred njo zapišete enojni narekovaj (').

    Odstranjevanje napak z uporabo operaterja Debug.Print

    Lahko postavite Debug.Print v kodi funkcije na pravo mesto. To je uporabno za preverjanje vrednosti spremenljivk, ki se ciklično spreminjajo.

    Primer učinkovitosti Debug.Print si lahko ogledate na spodnji sliki zaslona.

    Izjava Debug.Print i, vMax izpiše vrednosti in njihova zaporedna števila.

    V oknu Immediate sta prikazani dve številki (17 in 14) iz izbranega območja, ki ustreza nastavljenim mejam in med katerimi bo izbran maksimum. Številki 1 in 2 pomenita, da je funkcija opravila dva cikla, v katerih sta bili izbrani številki. Vidimo vrednosti najpomembnejših spremenljivk, kot smo to prej storili pri MsgBox . Vendar to ni ustavilo funkcije.

    Klic funkcije iz postopka

    Uporabniško definirane funkcije lahko pokličete ne iz celice v delovnem listu, temveč iz postopka. V tem primeru bodo vse napake prikazane v oknu Visual Basic Editor.

    Tukaj je prikazano, kako lahko uporabniško definirano funkcijo GetMaxBerween pokličete iz postopka:

    Sub Test() Dim x x = GetMaxBetween(Range ("A1:A6" ), 10, 50) MsgBox(x) End Sub

    Postavite kurzor kamor koli v kodo in pritisnite F5 . Če v funkciji ni napake, se prikaže pojavno okno z rezultatom izračuna.

    V primeru napake se v urejevalniku VBA prikaže ustrezno sporočilo. Izračun se ustavi, vrstica kode, v kateri je prišlo do napake, pa je označena z rumeno barvo. Zlahka lahko ugotovite, kje in zakaj je prišlo do napake.

    To je vse. Zdaj ste ustvarili svoj dodatek, ga dodali v Excel in v njem lahko uporabite UDF. Če želite uporabiti več UDF, v urejevalniku VBA v modulu dodatka preprosto napišite kodo in jo shranite.

    To je za danes vse. Obravnavali smo različne načine odpravljanja napak v funkcijah po meri in se naučili, kako jih uporabiti v delovnem zvezku. Resnično upamo, da so vam ta navodila v pomoč. Če imate kakršna koli vprašanja, pišite v komentarje k temu članku.

    Michael Brown je predan tehnološki navdušenec s strastjo do poenostavljanja kompleksnih procesov z uporabo programskih orodij. Z več kot desetletnimi izkušnjami v tehnološki industriji je svoje veščine izpopolnil v Microsoft Excelu in Outlooku ter Google Preglednicah in Dokumentih. Michaelov blog je namenjen deljenju svojega znanja in strokovnega znanja z drugimi ter ponuja preproste nasvete in vadnice za izboljšanje produktivnosti in učinkovitosti. Ne glede na to, ali ste izkušen strokovnjak ali začetnik, Michaelov blog ponuja dragocene vpoglede in praktične nasvete, kako kar najbolje izkoristiti ta osnovna programska orodja.