Sisukord
Kuna te juba teate, kuidas UDF-i luua (ja loodetavasti olete ka proovinud neid Excelis rakendada), siis kaevume veidi sügavamale ja vaatame, mida saab teha juhul, kui teie kasutaja määratletud funktsioon ei tööta.
Selleks, et lahendada mõningaid probleeme kohandatud funktsiooni loomisel, peate tõenäoliselt käivitama silumise. Siis saate olla kindel, et funktsioon töötab õigesti.
Uurime järgmisi silumistehnikaid:
Kohandatud funktsiooni loomisel on alati võimalus, et teete vea. Kohandatud funktsioonid on tavaliselt üsna keerulised. Ja nad ei hakka alati kohe õigesti tööle. Valem võib tagastada vale tulemuse või vea #VALUE! Erinevalt tavalistest Exceli funktsioonidest ei näe te muid teateid.
Kas on olemas võimalus minna kohandatud funktsioonist samm-sammult läbi, et kontrollida, kuidas iga selle käsklus töötab? Muidugi! Selleks kasutatakse silumist.
Pakun teile mitu võimalust oma kohandatud funktsiooni silumiseks, et saaksite valida selle, mis teile sobib.
Näitena kasutame kohandatud funktsiooni GetMaxBetween ühest meie varasemast artiklist, mis arvutab maksimaalse arvu määratud väärtusvahemikus:
Function 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 FunctionFunktsiooni argumentideks on lahtrite vahemik, kuhu numbrid kirjutatakse, ning väärtuste ülemine ja alumine piir.
Asetage MsgBox funktsioon olulistesse kohtadesse
Arvutuste teostamise jälgimiseks saate kuvada kõige olulisemate muutujate väärtused ekraanil õigetes kohtades. Seda saab teha hüpikdialoogide abil.
MsgBox on dialoogiboks, mida saab kasutada mingi sõnumi näitamiseks kasutajale.
MsgBoxi süntaks on sarnane teiste VBA funktsioonidega:
MsgBox(prompt [, nupud] [, pealkiri] [, helpfile, kontekst])kiire on nõutav argument. See sisaldab dialoogiaknas kuvatavat sõnumit. Seda saab kasutada ka üksikute muutujate väärtuste kuvamiseks.
Kõik muud argumendid on vabatahtlikud.
[ nupud ] - määrab, milliseid nuppe ja ikoone kuvatakse ekraanil. MsgBox Näiteks kui me kasutame valikut vbOkOnly , siis ainult OK nuppu. Isegi kui te seda argumenti ei kasutanud, kasutatakse seda nuppu vaikimisi.
[ pealkiri ] - siin saate määrata sõnumikasti pealkirja.
Üleminek sõnadest praktikasse ja alustame silumist. Sõnumi kuvamiseks lisame koodile järgmise rea GetMaxBetween kasutaja määratud funktsioon enne Juhtum Else operaator:
MsgBox vMax,, "Count -" & iTulemuseks on järgmine:
Function 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) End FunctionKasutades vMax muutuja dialoogiboksis näeme, millised numbrid vastavad valikukriteeriumidele, nii et saame valida neist suurima. Väljendiga "Count -" & I pealkirjaribal näitame, mitu numbrit oleme juba valinud, et määrata maksimaalne väärtus. Iga uue väärtusega suureneb loendur.
Kui oleme oma UDFi seadistanud, rakendame alljärgnevat valemit kuupäevavahemikule:
= GetMaxBetween (A1:A6,10,50)
Pärast nupu Enter vajutamist kuvatakse teade, nagu allpool esitatud ekraanipildil:
See on esimene number vahemikus A1: A6, mis vastab kriteeriumidele: suurem kui 10, kuid väiksem kui 50.
Pärast klõpsu OK ilmub teine teade numbriga 14. Ülejäänud numbrid ei vasta valikukriteeriumidele. Seetõttu väljub funktsioon ja tagastab kahest väärtusest suurima, 17.
The MsgBox funktsiooni saab kasutada teie kohandatud funktsiooni kõige olulisemates kohtades, et kontrollida, kuidas üksikute muutujate väärtused muutuvad. Sõnumikastid võivad olla väga kasulikud, kui teil on suur funktsioon ja palju arvutusi. Sellisel juhul on teil lihtne kindlaks teha, millises koodi osas viga esineb.
Määrake kindlaks peatuskohad ja tehke samm-sammult
Saate lisada oma funktsiooni koodi breakpoints, kus koodi täitmine peatub. Nii saate jälgida arvutamise protsessi samm-sammult. Seejuures näete, kuidas muutujate väärtused muutuvad.
Pausipunkti lisamiseks asetage kursor reale, mis sisaldab avaldist, mille puhul soovite teha pausi. Seejärel tehke paremklõps ja valige Debug -> Toggle Breakpoint (katkestuspunkti vahetamine) või vajutage lihtsalt F9 . Võite ka klõpsata soovitud kohas funktsiooni koodist vasakul asuval vertikaalsel hallil alal.
Ilmub punane ring, nagu näete alloleval ekraanipildil. Punase värviga on esile tõstetud koodirida, kus arvutused peatatakse.
Nüüd avaneb VBA redaktori aken, kui funktsioon töötab. Kursor asub punktis, kus te peatasite.
Kui viibite hiirekursoriga mis tahes muutuja kohal funktsioonikoodis, näete nende praegust väärtust:
Arvutuste jätkamiseks vajutage klahvi F5.
Märkus. Pärast katkestuspunkti saate hakata arvutuste kulgu samm-sammult jälgima. Kui vajutate nuppu F8, käivitub ainult üks järgmine rida VBA-koodist. Kollane nooltega joon liigub ka viimasele täidetavale koodipositsioonile.
Kuna funktsiooni täitmine on taas peatatud, saate hiirekursori abil vaadata kõigi funktsiooni muutujate praeguseid väärtusi.
Järgmine vajutus F8 viib meid ühe sammu võrra edasi. Seega võite vajutada F8 kuni arvutuse lõpuni. Või vajutada F5, et jätkata arvutust kuni järgmise murdepunktini.
Kui tekib viga, peatub kursor koodis kohas, kus viga tekkis. Ja te näete ka avanevat veateadet. See teeb probleemi põhjuse määramise lihtsaks.
Määratud murdepunktid kehtivad kuni faili sulgemiseni. Kui avate selle uuesti, peate need uuesti seadma. Mitte just kõige mugavam meetod, kas pole?
Seda probleemi on siiski võimalik lahendada. Sisestage üks Stop lausungi funktsiooni koodi vajalikes punktides ja saate programmi täitmise peatada samamoodi nagu katkestuspunktide kasutamisel.
Kui VBA kohtab Stop käsk, peatab see programmi täitmise ja ootab teie tegevust. Kontrollige muutujate väärtusi ja jätkamiseks vajutage F5.
Või vajutage F8, et täita funktsiooni samm-sammult, nagu eespool kirjeldatud.
The Stop avaldis on osa programmist ja seetõttu ei kustutata seda, nagu breakpoint'i puhul. Kui olete debugimise lõpetanud, eemaldage see ise. Või muutke see kommentaariks, kui eelnevad sellele ühekordsed jutumärgid (').
Debugimine operaatori Debug.Print abil
Saate paigutada Debug.Print funktsiooni koodis õiges kohas. See on kasulik tsükliliselt muutuvate muutujate väärtuste kontrollimiseks.
Näide Debug.Print'i jõudlusest on näha alloleval ekraanipildil.
Avaldus Debug.Print i, vMax prindib väärtused ja nende järjekorranumbrid.
Immediate aknas näeme kahte numbrit (17 ja 14) valitud vahemikust, mis vastab seatud piiridele ja mille hulgast valitakse välja maksimum. Numbrid 1 ja 2 tähendavad, et funktsioon on läbinud 2 tsüklit, mille jooksul numbrid valiti. Näeme kõige olulisemate muutujate väärtusi, nagu varem tegime seda ka MsgBox Kuid see ei peatanud funktsiooni.
Protseduurist funktsiooni kutsumine
Kasutajamääratletud funktsiooni saab kutsuda mitte töölehe lahtrist, vaid protseduurist. Sel juhul kuvatakse kõik vead Visual Basici redaktori aknas.
Järgnevalt on kirjeldatud, kuidas saab protseduurist välja kutsuda kasutaja määratud funktsiooni GetMaxBerween:
Sub Test() Dim x x = GetMaxBetween(Range ( "A1:A6" ), 10, 50) MsgBox(x) End SubAsetage kursor kuhugi koodis ja vajutage F5 . Kui funktsioonis ei ole viga, ilmub hüpikaken arvutustulemusega.
Vea korral näete VBA redaktoris vastavat teadet. Arvutus peatatakse ja koodirida, milles viga tekkis, on kollase värviga esile tõstetud. Te saate hõlpsasti kindlaks teha, kus ja miks viga tekkis.
See on kõik. Nüüd olete loonud oma lisavõimaluse, lisanud selle Excelisse ja saate selles kasutada UDF-i. Kui soovite kasutada rohkem UDF-i, kirjutage lihtsalt kood lisavõimaluse moodulis VBA redaktoris ja salvestage see.
See on kõik tänaseks. Oleme käsitlenud erinevaid võimalusi kohandatud funktsioonide silumiseks ja õppinud, kuidas neid oma töövihikus kasutada. Loodame väga, et need juhised on teile kasulikud. Kui teil on küsimusi, kirjutage selle artikli kommentaaridesse.