Naučite kako otkloniti greške prilagođenih funkcija u Excelu

  • Podijeli Ovo
Michael Brown

Pošto već znate kako da kreirate UDF-ove (a nadam se da ste i pokušali da ih primenite u svom Excel-u), hajde da kopamo malo dublje i vidimo šta se može učiniti u slučaju da vaša korisnički definisana funkcija ne radi.

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

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

    Kada kreirate prilagođenu funkciju, uvijek postoji mogućnost da ćeš pogrešiti. Prilagođene funkcije su obično prilično složene. I ne počnu uvijek ispravno raditi odmah. Formula može vratiti netačan rezultat ili #VRIJEDNOST! greška. Za razliku od standardnih Excel funkcija, nećete vidjeti nikakve druge poruke.

    Postoji li način da se prođe kroz prilagođenu funkciju korak po korak da provjerite kako svaki od njenih izraza funkcionira? Naravno! Za to se koristi otklanjanje grešaka.

    Ponudit ću vam nekoliko načina za otklanjanje grešaka u vašoj prilagođenoj funkciji tako da možete odabrati onu koja vam odgovara.

    Kao primjer, koristimo prilagođenu funkciju GetMaxBetween iz jednog od naših prethodnih članaka koji izračunava maksimalni 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 Odaberite Case vMax Case MinNum + 0,01 do MaxNum - 0,01 arrNums(i) = vMax i = i + 1 Case Else GetMaxBetween = 0 Kraj Odaberite sljedeći NumRange GetMaxBetween = WorksheetFunction.Max(arrNums) Argumenti funkcije Kraja su

    raspon ćelija u kojima se upisuju brojevi, kao i gornja i donja granica vrijednosti.

    Postavite funkciju MsgBox na važna mjesta

    Da biste pratili izvršenje proračuna, možete prikazati vrijednosti najvažnijih varijabli na ekranu na pravim mjestima. Ovo se može učiniti pomoću iskačućih dijaloških okvira.

    MsgBox je dijaloški okvir koji možete koristiti da prikažete neku vrstu poruke korisniku.

    MsgBoxova sintaksa je sličan drugim VBA funkcijama:

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

    prompt je obavezan 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 opcioni.

    [ buttons ] - određuje koja dugmad i ikone su prikazano u MsgBox . Na primjer, ako koristimo opciju vbOkOnly , tada će biti prikazano samo dugme OK . Čak i ako ste propustili ovaj argument, ovo dugme se koristi po defaultu.

    [ naslov ] - ovdje možete odrediti naslov okvira za poruku.

    Pređimo sa riječi za vježbanje i početak otklanjanja grešaka. Za prikazporuku, dodajte sljedeći red u kod korisnički definirane funkcije GetMaxBetween prije operatora Case Else :

    MsgBox vMax,, "Count -" & i

    Evo šta ć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 Odaberite Case vMax Case MinNum + 0,01 do MaxNum - 0,01 arrNums(i) = vMax i = i + 1 MsgBox vMax,, "Count -" & i Case Else GetMaxBetween = 0 Kraj Odaberi sljedeći NumRange GetMaxBetween = WorksheetFunction.Max(arrNums) End Funkcija

    Upotrebom varijable vMax u dijaloškom okviru, vidjet ćemo koji brojevi ispunjavaju kriterije za odabir, tako da da možemo odabrati najveće od njih. Sa izrazom "Count -" & I u naslovnoj traci označavamo koliko brojeva smo već odabrali da odredimo maksimalnu vrijednost. Brojač će se povećavati sa svakom novom vrijednošću.

    Kada postavimo UDF, primjenjujemo formulu ispod na raspon datuma:

    = GetMaxBetween (A1:A6,10,50)

    Nakon tipke Enter pritisnete, vidjet ćete poruku kao na slici ispod:

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

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

    Funkcija MsgBox se može koristiti na najvažnijim mjestima u vašoj prilagođenoj funkciji za kontrolu kako vrijednosti promjene pojedinačnih varijabli. Kutije za poruke mogu biti vrlo korisne kada imate veliku funkciju i puno računanja. U ovom slučaju, bit će vam lako odrediti u kojem dijelu koda dolazi do greške.

    Odredite tačke zaustavljanja i izvršite korak po korak

    Možete dodati tačke prekida u kod vašu funkciju gdje će se izvršenje koda zaustaviti. Tako da možete pratiti proces izračuna korak po korak. Na taj način možete vidjeti kako se mijenjaju vrijednosti varijabli.

    Da biste dodali tačku prekida, postavite kursor na liniju koja sadrži naredbu u kojoj želite pauzirati. Zatim kliknite desnim tasterom miša i odaberite Debug -> Prebacite tačku prekida ili samo pritisnite F9 . Također možete kliknuti na željeno mjesto na okomitom sivom području lijevo od koda funkcije.

    Pojaviće se crveni krug, kao što možete vidjeti na slici ispod. Red koda u kojem će izračunavanje biti zaustavljen je označen crvenom bojom.

    Sada će se prozor VBA editora otvoriti kada se funkcija pokrene. Kursor će biti pozicioniran na mjestu gdje ste stali.

    Ako zadržite pokazivač miša iznad bilo koje od varijabli u kodu funkcije, možete vidjeti njihovu trenutnuvrijednost:

    Pritisnite F5 za nastavak izračuna.

    Napomena. Nakon tačke prekida, možete početi pratiti napredak proračuna korak po korak. Ako pritisnete dugme F8, izvršiće se samo jedan sledeći red VBA koda. Žuta linija sa strelicom će se također pomaknuti na poziciju posljednjeg izvršenog koda.

    Pošto je izvršenje funkcije ponovo pauzirano, možete vidjeti trenutne vrijednosti svih varijabli funkcije pomoću kursora miša.

    Sljedeći pritisak na F8 odvest će nas korak naprijed . Tako da možete pritisnuti F8 do kraja izračunavanja. Ili pritisnite F5 da nastavite računanje do sljedeće tačke prekida.

    Ako dođe do greške, kursor će se zaustaviti na tački u kodu gdje je došlo do greške. Također ćete vidjeti iskačuću poruku o grešci. Ovo olakšava utvrđivanje uzroka problema.

    Prelomne tačke koje navedete će se primjenjivati ​​dok ne zatvorite datoteku. Kada ga ponovo otvorite, morat ćete ih ponovo postaviti. Nije najprikladniji način, zar ne?

    Međutim, ovaj problem se može riješiti. Umetnite naredbu Stop u kod funkcije na potrebnim tačkama i možete zaustaviti izvršavanje programa na isti način kao kada koristite tačke prekida.

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

    Ili pritisnite F8 da ispunite funkciju korak po korak kao što je gore opisano.

    Izjava Stop je dio programa i stoga je nije obrisan, kao što je slučaj sa tačkom prekida. Kada završite s otklanjanjem grešaka, sami ga uklonite. Ili ga pretvorite u komentar tako što ćete mu prethoditi jednim navodnikom (').

    Otklanjanje greš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 performansi Debug.Print na slici ispod.

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

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

    Pozovite funkciju iz procedure

    Možete pozvati korisnički definiranu funkciju ne iz ćelije na radnom listu, već iz procedure. U ovom slučaju, sve greške će biti prikazane u prozoru Visual Basic Editor-a.

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

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

    Postavite kursor bilo gdje u kodu i pritisnite F5. Ako nema greške u funkciji, videćete iskačući prozor sa rezultatom proračuna.

    U slučaju greške, videćete odgovarajuću poruku u VBA editoru. Obračun će biti zaustavljen, a red koda u kojem je došlo do greške bit će označen žutom bojom. Možete lako identificirati gdje i zašto je došlo do greške.

    To je sve. Sada ste kreirali svoj vlastiti dodatak, dodali ga u Excel i možete koristiti UDF u njemu. Ako želite da koristite više UDF-ova, samo napišite kod u modulu dodataka u VBA editoru i sačuvajte ga.

    To je to za danas. Pokrili smo različite načine za otklanjanje grešaka u prilagođenim funkcijama i naučili kako ih koristiti u radnoj svesci. Zaista se nadamo da će vam ove smjernice biti od pomoći. Ako imate pitanja, pišite u komentarima na ovaj članak.

    Michael Brown je posvećen tehnološki entuzijasta sa strašću za pojednostavljenje složenih procesa pomoću softverskih alata. Sa više od decenije iskustva u tehnološkoj industriji, usavršio je svoje vještine u Microsoft Excelu i Outlooku, kao i Google Sheets i Docs. Michaelov blog je posvećen dijeljenju svog znanja i stručnosti s drugima, pružajući jednostavne savjete i tutorijale za poboljšanje produktivnosti i efikasnosti. Bilo da ste iskusni profesionalac ili početnik, Michaelov blog nudi vrijedne uvide i praktične savjete za izvlačenje maksimuma iz ovih osnovnih softverskih alata.