Naučite otklanjati pogreške prilagođenih funkcija u Excelu

  • Podijeli Ovo
Michael Brown

Kao što već znate kako izraditi UDF-ove (i nadam se da ste ih također pokušali primijeniti u svom Excelu), idemo malo dublje i vidjeti što se može učiniti u slučaju da vaša korisnički definirana funkcija ne radi.

Kako biste riješili neke probleme prilikom izrade prilagođene funkcije, najvjerojatnije ćete morati pokrenuti debug. Tada možete biti sigurni da funkcija radi ispravno.

Istražit ćemo sljedeće tehnike otklanjanja pogrešaka:

    Kada izradite prilagođenu funkciju, uvijek postoji mogućnost da ćeš pogriješiti. Prilagođene funkcije obično su prilično složene. I ne počnu uvijek odmah ispravno raditi. Formula može vratiti netočan rezultat ili #VALUE! greška. Za razliku od standardnih Excel funkcija, nećete vidjeti nijednu drugu poruku.

    Postoji li način da prođete kroz prilagođenu funkciju korak po korak da biste provjerili kako svaka od izjava radi? Naravno! Za to se koristi otklanjanje pogrešaka.

    Ponudit ću vam nekoliko načina za otklanjanje pogrešaka vaše prilagođene funkcije tako da možete odabrati onaj koji vam odgovara.

    Kao primjer, koristimo prilagođenu funkciju GetMaxBetween iz jednog od naših prethodnih članaka koji izračunava najveći broj u navedenom rasponu vrijednosti:

    Funkcija GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i Kao Integer ReDim arrNums(rngCells.Count) za svaki NumRange u 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 su raspon ćelija u koje su upisani brojevi, kao i gornja i donja granica vrijednosti.

    Postavite funkciju MsgBox na važna mjesta

    Kako biste pratili izvođenje izračuna, možete prikazati vrijednosti najvažnijih varijabli na ekranu na pravim mjestima. To se može učiniti pomoću skočnih dijaloških okvira.

    MsgBox je dijaloški okvir koji možete koristiti za prikaz neke vrste poruke korisniku.

    Sintaksa MsgBoxa slična je drugim VBA funkcijama:

    MsgBox(prompt [, gumbi] [, naslov] [, datoteka pomoći, kontekst])

    prompt je potreban argument. Sadrži poruku koju vidite u dijaloškom okviru. Također se može koristiti za prikaz vrijednosti pojedinačnih varijabli.

    Svi ostali argumenti su izborni.

    [ gumbi ] - određuje koji su gumbi i ikone prikazan u MsgBox . Na primjer, ako koristimo opciju vbOkOnly , tada će biti prikazan samo gumb OK . Čak i ako ste propustili ovaj argument, ovaj se gumb koristi prema zadanim postavkama.

    [ naslov ] - ovdje možete odrediti naslov okvira s porukom.

    Prebacimo se s riječi za vježbanje i početak otklanjanja pogrešaka. Za prikazporuci, dodajte sljedeći redak kodu korisnički definirane funkcije GetMaxBetween prije operatora Case Else :

    MsgBox vMax,, "Count -" & i

    Evo što ćemo dobiti u rezultatu:

    Funkcija GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.Count) Za svaki NumRange u 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) End Function

    Upotrebom vMax varijable u dijaloškom okviru, vidjet ćemo koji brojevi ispunjavaju kriterije za odabir, pa da možemo odabrati najveći od njih. Uz izraz "Count -" & I u naslovnoj traci označavamo koliko smo brojeva već odabrali za određivanje maksimalne vrijednosti. Brojač će se povećavati sa svakom novom vrijednošću.

    Nakon što smo postavili naš UDF, primjenjujemo formulu ispod na datumski raspon:

    = GetMaxBetween (A1:A6,10,50)

    Nakon gumba Enter pritisne, vidjet ćete poruku kao na slici ispod:

    Ovo je prvi broj u rasponu A1: A6 koji zadovoljava kriterije: veći od 10, ali manji od 50.

    Nakon što kliknete OK, pojavljuje se druga poruka s brojem 14. Ostali brojevi ne odgovaraju odabirukriteriji. Stoga funkcija izlazi i vraća najveću od dvije vrijednosti, 17.

    Funkcija MsgBox može se koristiti na najvažnijim mjestima u vašoj prilagođenoj funkciji za kontrolu kako vrijednosti promjena pojedinih varijabli. Okviri s porukama mogu biti vrlo korisni kada imate veliku funkciju i puno računanja. U ovom slučaju, bit će vam lako odrediti u kojem se dijelu koda pojavljuje pogreška.

    Odredite točke zaustavljanja i izvedite korak po korak

    Možete dodati točke prekida u kod svoju funkciju gdje će se izvođenje koda zaustaviti. Tako možete pratiti postupak izračuna korak po korak. Pritom možete vidjeti kako se mijenjaju vrijednosti varijabli.

    Da biste dodali prijelomnu točku, postavite kursor na redak koji sadrži izjavu na kojoj ste odabrali pauzirati. Zatim kliknite desnom tipkom miša i odaberite Debug -> Uključite prijelomnu točku ili samo pritisnite F9. Također možete kliknuti na željeno mjesto na okomitom sivom području lijevo od koda funkcije.

    Pojavit će se crveni krug, kao što možete vidjeti na slici ispod. Redak koda u kojem će se izračun zaustaviti označen je crvenom bojom.

    Sada će se prozor VBA uređivača otvoriti kada je funkcija pokrenuta. Kursor će se postaviti na točku na kojoj ste stali.

    Ako pokazivačem miša zadržite iznad bilo koje varijable u kodu funkcije, možete vidjeti njihovu trenutnuvalue:

    Pritisnite F5 za nastavak izračuna.

    Napomena. Nakon prijelomne točke, možete početi pratiti napredak izračuna korak po korak. Ako pritisnete tipku F8, izvršit će se samo jedan sljedeći redak VBA koda. Žuta linija sa strelicom također će se pomaknuti na mjesto zadnjeg izvršenog koda.

    Budući da je izvršavanje funkcije ponovno pauzirano, možete vidjeti trenutne vrijednosti svih varijabli funkcije pomoću pokazivača miša.

    Sljedeći pritisak na F8 odvest će nas jedan korak naprijed . Dakle, možete pritisnuti F8 do kraja izračuna. Ili pritisnite F5 da nastavite s izračunom do sljedeće prijelomne točke.

    Ako se pojavi pogreška, pokazivač će se zaustaviti na mjestu u kodu gdje je došlo do pogreške. Također ćete vidjeti skočnu poruku o pogrešci. To olakšava određivanje uzroka problema.

    Prijelazne točke koje navedete primjenjivat će se dok ne zatvorite datoteku. Kada ga ponovno otvorite, morat ćete ih ponovno postaviti. Nije najprikladnija metoda, zar ne?

    Međutim, ovaj se problem može riješiti. Umetnite naredbu Stop u funkcijski kod na potrebnim točkama i možete zaustaviti izvođenje programa na isti način kao kod korištenja prekidnih točaka.

    Kada VBA naiđe na naredbu Stop , zaustavit će izvođenje programa i čekati vašu akciju. Zatim provjerite vrijednosti varijablipritisnite F5 za nastavak.

    Ili pritisnite F8 za izvršavanje funkcije korak po korak kao što je gore opisano.

    Izjava Stop je dio programa i stoga je nije izbrisano, kao što je slučaj s prijelomnom točkom. Kada završite s otklanjanjem pogrešaka, uklonite ga sami. Ili ga pretvorite u komentar tako da ispred njega stavite jedan navodnik (').

    Uklanjanje pogrešaka pomoću operatora Debug.Print

    Možete postaviti Debug.Print u kod funkcije na pravom mjestu. Ovo je korisno za provjeru vrijednosti varijabli koje se ciklički mijenjaju.

    Možete vidjeti primjer izvedbe Debug.Print na snimci zaslona u nastavku.

    Izjava Debug.Print i, vMax ispisuje vrijednosti i njihove redne brojeve.

    U prozoru Immediate vidite dva broja (17 i 14) iz odabranog raspona, koji odgovaraju postaviti granice i među kojima će biti odabran maksimum. Znamenke 1 i 2 znače da je funkcija završila 2 ciklusa u kojima su odabrani brojevi. Vidimo vrijednosti najvažnijih varijabli, kao što smo ranije učinili s MsgBox . Ali to nije zaustavilo funkciju.

    Pozovite funkciju iz procedure

    Korisnički definiranu funkciju možete pozvati ne iz ćelije na radnom listu, već iz procedure. U tom će slučaju sve pogreške biti prikazane u prozoru Visual Basic Editora.

    Evo kako možete pozvati korisnički definiranu funkciju GetMaxBerween izprocedure:

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

    Postavite kursor bilo gdje u kodu i pritisnite F5 . Ako u funkciji nema pogreške, vidjet ćete skočni prozor s rezultatom izračuna.

    U slučaju pogreške, vidjet ćete odgovarajuću poruku u VBA editoru. Izračun će se zaustaviti, a linija koda u kojoj je došlo do pogreške bit će označena žutom bojom. Možete lako prepoznati gdje i zašto je došlo do pogreške.

    To je sve. Sada ste izradili vlastiti dodatak, dodali ga u Excel i možete koristiti UDF u njemu. Ako želite koristiti više UDF-ova, samo napišite kod u modul dodatka u VBA uređivaču i spremite ga.

    To je to za danas. Pokrili smo različite načine otklanjanja pogrešaka prilagođenih funkcija i naučili kako ih koristiti u radnoj knjizi. Zaista se nadamo da će vam ove smjernice biti korisne. Ako imate pitanja, napišite ih u komentarima na ovaj članak.

    Michael Brown predani je tehnološki entuzijast sa strašću za pojednostavljivanjem složenih procesa pomoću softverskih alata. S više od desetljeća iskustva u tehnološkoj industriji, usavršio je svoje vještine u Microsoft Excelu i Outlooku, kao i Google tablicama i dokumentima. Michaelov blog posvećen je dijeljenju znanja i stručnosti s drugima, pružajući savjete i upute koje je lako slijediti za poboljšanje produktivnosti i učinkovitosti. Bez obzira jeste li iskusni profesionalac ili početnik, Michaelov blog nudi vrijedne uvide i praktične savjete za izvlačenje maksimuma iz ovih osnovnih softverskih alata.