Tabela e përmbajtjes
Siç e dini tashmë se si të krijoni UDF (dhe, shpresoj se keni provuar t'i aplikoni ato edhe në Excel), le të gërmojmë pak më thellë dhe të shohim se çfarë mund të bëhet në rast se funksioni i përcaktuar nga përdoruesi nuk funksionon.
Për të zgjidhur disa probleme gjatë krijimit të një funksioni të personalizuar, me shumë mundësi do t'ju duhet të ekzekutoni një korrigjim. Atëherë mund të siguroheni që funksioni po funksionon si duhet.
Ne do të shqyrtojmë teknikat e mëposhtme të korrigjimit:
Kur krijoni një funksion të personalizuar, ekziston gjithmonë një mundësi se do të gaboni. Funksionet e personalizuara janë zakonisht mjaft komplekse. Dhe ata jo gjithmonë fillojnë të punojnë si duhet menjëherë. Formula mund të kthejë një rezultat të pasaktë ose #VLERË! gabim. Ndryshe nga funksionet standarde të Excel-it, ju nuk do të shihni asnjë mesazh tjetër.
A ka ndonjë mënyrë për të kaluar një funksion të personalizuar hap pas hapi për të kontrolluar se si funksionon secili prej deklaratave të tij? Sigurisht! Korrigjimi përdoret për këtë.
Unë do t'ju ofroj disa mënyra për të korrigjuar funksionin tuaj të personalizuar në mënyrë që të zgjidhni atë që funksionon për ju.
Si shembull, ne përdorim funksionin e personalizuar GetMaxBetween nga një prej artikujve tanë të mëparshëm, i cili llogarit numrin maksimal në gamën e caktuar të vlerave:
Funksioni GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i Si numër i plotë ReDim arrNums(rngCells.Count) Për çdo NumRange Në rngCells vMax =NumRange Zgjidh Rastin vMax Rasti MinNum + 0,01 Deri në MaxNum - 0,01 arrNums(i) = vMax i = i + 1 Rasti tjetër GetMaxBetween = 0 Fund Zgjidh Tjetër NumRange GetMaxBetween = Funksioni i fletës së punës.Max(arrnctions janë funksioni Fundi) diapazoni i qelizave ku janë shkruar numrat, si dhe kufiri i sipërm dhe i poshtëm i vlerave.
Vendosni funksionin MsgBox në vende të rëndësishme
Për të monitoruar ekzekutimin e llogaritjeve, mund të shfaqni vlerat e variablave më të rëndësishëm në ekran në vendet e duhura. Kjo mund të bëhet duke përdorur kutitë e dialogut pop-up.
MsgBox është një kuti dialogu që mund ta përdorni për t'i shfaqur një lloj mesazhi përdoruesit.
Sintaksa e MsgBox është i ngjashëm me funksionet e tjera të VBA:
MsgBox(prompt [, buttons] [, title] [, helpfile, context])prompt është një argument i kërkuar. Ai përmban mesazhin që shihni në kutinë e dialogut. Mund të përdoret gjithashtu për të shfaqur vlerat e variablave individuale.
Të gjitha argumentet e tjera janë opsionale.
[ butons ] - përcakton se cilat butona dhe ikona janë shfaqet në MsgBox . Për shembull, nëse përdorim opsionin vbOkOnly , atëherë do të shfaqet vetëm butoni OK . Edhe nëse e keni humbur këtë argument, ky buton përdoret si parazgjedhje.
[ titulli ] - këtu mund të specifikoni titullin e kutisë së mesazhit.
Le të kalojmë nga fjalë për të praktikuar dhe për të filluar korrigjimin. Për të shfaqurmesazh, shtoni rreshtin e mëposhtëm në kodin e funksionit GetMaxBetween të përcaktuar nga përdoruesi përpara operatorit Case Else :
MsgBox vMax,, "Count -" & iJa çfarë do të marrim në rezultat:
Funksioni GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange si Range Dim vMax Dim arrNums() Dim i Si numër i plotë ReDim arrNums(rngCells.Count) Për çdo varg numerik në rngqeliza vMax = NumRange Zgjidhni Rastin vMax Rasti MinNum + 0.01 Deri MaxNum - 0.01 arrNums(i) = vMax i = i + 1 MsgBox vMax,, "Count -" & i Rasti tjetër GetMaxBetween = 0 Fund Zgjidh Next NumRange GetMaxBetween = WorksheetFunction.Max(arrNums) Funksioni FundDuke përdorur ndryshoren vMax në kutinë e dialogut, do të shohim se cilët numra plotësojnë kriteret për përzgjedhje, kështu që që mund të zgjedhim më të madhin prej tyre. Me shprehjen "Numëroni -" & Unë në shiritin e titullit, ne tregojmë se sa numra kemi zgjedhur tashmë për të përcaktuar vlerën maksimale. Numëruesi do të rritet me çdo vlerë të re.
Pasi të kemi vendosur UDF-në tonë, ne zbatojmë formulën e mëposhtme në intervalin e datave:
= GetMaxBetween (A1:A6,10,50)
Pas butonit Enter është shtypur, do të shihni një mesazh si në pamjen e mëposhtme:
Ky është numri i parë në rangun A1: A6 që plotëson kriteret: më i madh se 10 por më pak se 50.
Pasi klikoni OK, shfaqet një mesazh i dytë me numrin 14. Pjesa tjetër e numrave nuk përputhen me përzgjedhjenkriteret. Prandaj, funksioni del dhe kthen më të madhen nga dy vlerat, 17.
Funksioni MsgBox mund të përdoret në vendet më të rëndësishme në funksionin tuaj të personalizuar për të kontrolluar se si vlerat ndryshimi i ndryshoreve individuale. Kutitë e mesazheve mund të jenë shumë të dobishme kur keni një funksion të madh dhe shumë llogaritje. Në këtë rast, do të jetë e lehtë për ju të përcaktoni se në cilën pjesë të kodit ndodh gabimi.
Përcaktoni pikat e ndalimit dhe kryeni hap pas hapi
Mund të shtoni pika ndërprerje në kodin e funksionin tuaj ku do të ndalojë ekzekutimi i kodit. Kështu që ju mund të ndiqni procesin e llogaritjes hap pas hapi. Duke vepruar kështu, mund të shihni se si ndryshojnë vlerat e variablave.
Për të shtuar një pikë ndërprerjeje, vendoseni kursorin në rreshtin që përmban deklaratën ku zgjidhni të ndaloni. Më pas kliko me të djathtën dhe zgjidh Debug -> Ndryshoni pikën e ndërprerjes ose thjesht shtypni F9 . Mund të klikoni gjithashtu në vendin e dëshiruar në zonën gri vertikale në të majtë të kodit të funksionit.
Do të shfaqet një rreth i kuq, siç mund ta shihni në pamjen e mëposhtme të ekranit. Linja e kodit ku do të ndalet llogaritja është e theksuar me të kuqe.
Tani, dritarja e redaktuesit të VBA do të hapet kur funksioni është duke u ekzekutuar. Kursori do të pozicionohet në pikën ku keni ndalur.
Nëse e vendosni kursorin e miut mbi ndonjë nga variablat në kodin e funksionit, mund të shihni aktualitetin e tyrevlera:
Shtypni F5 për të vazhduar llogaritjen.
Shënim. Pas pikës së ndërprerjes, mund të filloni të gjurmoni përparimin e llogaritjeve hap pas hapi. Nëse shtypni butonin F8, do të ekzekutohet vetëm një rresht tjetër i kodit VBA. Vija e verdhë me një shigjetë do të zhvendoset gjithashtu në pozicionin e fundit të kodit të ekzekutuar.
Meqenëse ekzekutimi i funksionit është ndërprerë përsëri, ju mund të shikoni vlerat aktuale të të gjitha variablave të funksionit duke përdorur kursorin e miut.
Shtypja tjetër e F8 do të na çojë një hap përpara . Kështu që mund të shtypni F8 deri në fund të llogaritjes. Ose shtypni F5 për të vazhduar llogaritjen deri në pikën tjetër të ndërprerjes.
Nëse ndodh një gabim, kursori do të ndalet në pikën e kodit ku ka ndodhur gabimi. Dhe do të shihni gjithashtu një mesazh gabimi pop-up. Kjo e bën të lehtë përcaktimin e shkakut të problemit.
Pikat e ndërprerjes që specifikoni do të zbatohen derisa të mbyllni skedarin. Kur ta rihapni, do t'ju duhet t'i vendosni ato përsëri. Nuk është metoda më e përshtatshme, a nuk mendoni?
Megjithatë, ky problem mund të zgjidhet. Futni një deklaratë Stop në kodin e funksionit në pikat e nevojshme dhe mund ta ndaloni ekzekutimin e programit në të njëjtën mënyrë si kur përdorni pikat e ndërprerjes.
Kur VBA ndeshet me një deklaratë Stop , ajo do të ndalojë ekzekutimin e programit dhe do të presë për veprimin tuaj. Më pas kontrolloni vlerat e variablaveshtypni F5 për të vazhduar.
Ose shtypni F8 për të përmbushur funksionin hap pas hapi siç përshkruhet më sipër.
Deklarata Stop është pjesë e programit dhe për këtë arsye është nuk fshihet, siç është rasti me një pikë ndërprerjeje. Kur të keni mbaruar korrigjimin, hiqeni vetë. Ose kthejeni atë në një koment duke e paraprirë me një thonjëza të vetme (').
Debugimi duke përdorur operatorin Debug.Print
Ju mund ta vendosni Debug.Print në kodin e funksionit në vendin e duhur. Kjo është e dobishme për të kontrolluar vlerat e variablave që ndryshojnë në mënyrë ciklike.
Mund të shihni një shembull të performancës së Debug.Print në pamjen e mëposhtme të ekranit.
Deklarata Debug.Print i, vMax printon vlerat dhe numrat e tyre rendor.
Në dritaren "Immediate" shihni dy numra (17 dhe 14) nga diapazoni i zgjedhur, që korrespondon me vendosin kufij dhe ndër të cilët do të zgjidhet maksimumi. Shifrat 1 dhe 2 nënkuptojnë se funksioni ka përfunduar 2 cikle në të cilat janë zgjedhur numrat. Ne shohim vlerat e variablave më të rëndësishëm, siç kemi bërë më parë me MsgBox . Por kjo nuk e ndaloi funksionin.
Thirrja e një funksioni nga një procedurë
Mund të telefononi një funksion të përcaktuar nga përdoruesi jo nga një qelizë në fletën e punës, por nga një procedurë. Në këtë rast, të gjitha gabimet do të shfaqen në dritaren e Redaktuesit të Visual Basic.
Ja se si mund të telefononi funksionin e përcaktuar nga përdoruesi GetMaxBerween nga njëprocedura:
Sub Test() Dim x x = GetMaxBetween(Range ( "A1:A6" ), 10, 50) MsgBox(x) End SubPoziciononi kursorin kudo në kod dhe shtypni F5 . Nëse nuk ka gabim në funksion, do të shihni një dritare që shfaqet me rezultatin e llogaritjes.
Në rast gabimi, do të shihni një mesazh përkatës në redaktuesin VBA. Llogaritja do të ndalet dhe rreshti i kodit në të cilin ka ndodhur gabimi do të theksohet me të verdhë. Mund të identifikoni lehtësisht se ku dhe pse ndodhi gabimi.
Kjo është e gjitha. Tani ju keni krijuar shtesën tuaj, e keni shtuar në Excel dhe mund të përdorni UDF në të. Nëse dëshironi të përdorni më shumë UDF, thjesht shkruani kodin në modulin shtesë në redaktuesin VBA dhe ruajeni.
Kjo është për sot. Ne kemi trajtuar mënyra të ndryshme për të korrigjuar funksionet e personalizuara dhe kemi mësuar se si t'i përdorim ato në librin tuaj të punës. Ne me të vërtetë shpresojmë që këto udhëzime t'i gjeni të dobishme. Nëse keni ndonjë pyetje, shkruani në komentet e këtij artikulli.