Turinys
Kadangi jau žinote, kaip kurti UDF (ir, tikiuosi, taip pat bandėte jas taikyti "Excel" programoje), panagrinėkime šiek tiek giliau ir pažiūrėkime, ką galima padaryti, jei jūsų vartotojo apibrėžta funkcija neveikia.
Norint išspręsti kai kurias problemas kuriant pasirinktinę funkciją, greičiausiai reikės paleisti derinimą. Tada galėsite įsitikinti, kad funkcija veikia teisingai.
Išnagrinėsime šiuos derinimo būdus:
Kai kuriate pasirinktinę funkciją, visada yra tikimybė, kad suklysite. Pasirinktinės funkcijos paprastai yra gana sudėtingos. Ir jos ne visada iš karto pradeda veikti teisingai. Formulė gali grąžinti neteisingą rezultatą arba #VALUE! klaidą. Skirtingai nuo standartinių "Excel" funkcijų, kitų pranešimų nematysite.
Ar yra būdas žingsnis po žingsnio pereiti per pasirinktinę funkciją ir patikrinti, kaip veikia kiekvienas jos teiginys? Žinoma! Tam naudojamas derinimas.
Pasiūlysiu jums kelis pasirinktinės funkcijos derinimo būdus, kad galėtumėte pasirinkti jums tinkamiausią.
Pavyzdžiui, naudojame pasirinktinę funkciją GetMaxBetween iš vieno iš ankstesnių straipsnių, kuris apskaičiuoja didžiausią skaičių nurodytame verčių intervale:
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 FunctionFunkcijos argumentai - tai ląstelių, į kurias įrašomi skaičiai, diapazonas, taip pat viršutinė ir apatinė reikšmių riba.
Funkcijos MsgBox vieta svarbiose vietose
Kad galėtumėte stebėti skaičiavimų vykdymą, svarbiausių kintamųjų reikšmes galite rodyti tinkamose ekrano vietose. Tai galima padaryti naudojant iššokančius dialogo langus.
MsgBox yra dialogo langas, kurį galite naudoti norėdami naudotojui parodyti tam tikrą pranešimą.
MsgBox sintaksė panaši į kitų VBA funkcijų sintaksę:
MsgBox(raginimas [, mygtukai] [, pavadinimas] [, pagalbos failas, kontekstas])raginimas tai privalomas argumentas. Jame pateikiamas dialogo lange matomas pranešimas. Jis taip pat gali būti naudojamas atskirų kintamųjų reikšmėms rodyti.
Visi kiti argumentai yra neprivalomi.
[ mygtukai ] - nustato, kurie mygtukai ir piktogramos bus rodomi MsgBox Pavyzdžiui, jei naudojame parinktį vbOkOnly , tada tik GERAI bus rodomas mygtukas. Net jei praleidote šį argumentą, šis mygtukas bus naudojamas pagal numatytuosius nustatymus.
[ pavadinimas ] - čia galite nurodyti pranešimo lauko pavadinimą.
Pereikime nuo žodžių prie praktikos ir pradėkime derinti. Norėdami rodyti pranešimą, pridėkite prie kodo tokią eilutę GetMaxBetween vartotojo apibrėžta funkcija prieš Kitas atvejis operatorius:
MsgBox vMax,, "Count -" & iŠtai ką gausime kaip 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) End FunctionNaudojant vMax kintamąjį dialogo lange matysime, kurie skaičiai atitinka pasirinkimo kriterijus, kad galėtume pasirinkti didžiausią iš jų. Pavadinimo juostoje esančia išraiška "Count -" & I nurodysime, kiek skaičių jau pasirinkome, kad nustatytume didžiausią reikšmę. Skaitiklis bus didinamas su kiekviena nauja reikšme.
Nustatę savo UDF, datos intervalui taikome toliau pateiktą formulę:
= GetMaxBetween (A1:A6,10,50)
Paspaudę mygtuką Enter, pamatysite pranešimą, kaip parodyta toliau pateiktame paveikslėlyje:
Tai pirmas skaičius intervale A1: A6, atitinkantis kriterijus: didesnis nei 10, bet mažesnis nei 50.
Paspaudus OK, pasirodo antrasis pranešimas su skaičiumi 14. Likę skaičiai neatitinka pasirinkimo kriterijų. Todėl funkcija išeina ir grąžina didžiausią iš dviejų reikšmių - 17.
Svetainė MsgBox funkcija gali būti naudojama svarbiausiose jūsų pasirinktinės funkcijos vietose, siekiant kontroliuoti, kaip keičiasi atskirų kintamųjų reikšmės. Pranešimų laukai gali būti labai naudingi, kai turite didelę funkciją ir daug skaičiavimų. Tokiu atveju jums bus lengva nustatyti, kurioje kodo dalyje įvyko klaida.
Nustatykite sustojimo taškus ir atlikite veiksmus žingsnis po žingsnio
Į savo funkcijos kodą galite įtraukti pertraukos taškus, kuriuose kodo vykdymas bus sustabdytas. Taip galėsite žingsnis po žingsnio sekti skaičiavimo procesą. Tai darydami galite matyti, kaip keičiasi kintamųjų reikšmės.
Norėdami pridėti pertraukos tašką, pastatykite žymeklį eilutėje, kurioje yra teiginys, kuriame norite padaryti pertrauką. Tada spustelėkite dešinįjį pelės klavišą ir pasirinkite Debug -> Perjungti pertraukos tašką arba tiesiog paspauskite F9 . Taip pat galite spustelėti norimą vietą vertikalioje pilkoje srityje, esančioje kairėje funkcijos kodo pusėje.
Bus rodomas raudonas apskritimas, kaip matote toliau pateiktoje ekrano nuotraukoje. Kodo eilutė, kurioje bus sustabdytas skaičiavimas, pažymėta raudonai.
Dabar paleidus funkciją bus atidarytas VBA redaktoriaus langas. Kursorius bus padėtas toje vietoje, kurioje sustojote.
Jei pelės žymeklį užvesite ant bet kurio iš funkcijos kode esančių kintamųjų, pamatysite jų dabartinę vertę:
Paspauskite F5, jei norite tęsti skaičiavimą.
Pastaba. Įvedus pertraukos tašką, galima pradėti stebėti skaičiavimų eigą žingsnis po žingsnio. Jei paspausite mygtuką F8, bus vykdoma tik viena kita VBA kodo eilutė. Geltona linija su rodykle taip pat bus perkelta į paskutinę įvykdyto kodo vietą.
Kadangi funkcijos vykdymas vėl sustabdytas, naudodami pelės žymeklį galite peržiūrėti visų funkcijos kintamųjų dabartines vertes.
Kitą kartą paspaudę F8, žengsime vieną žingsnį į priekį. Taigi galite spausti F8 iki skaičiavimo pabaigos. Arba paspauskite F5, kad tęstumėte skaičiavimą iki kito lūžio taško.
Jei įvyksta klaida, žymeklis bus sustabdytas toje kodo vietoje, kurioje įvyko klaida. Taip pat matysite iššokantį klaidos pranešimą. Taip bus lengviau nustatyti problemos priežastį.
Nurodyti pertraukos taškai bus taikomi tol, kol uždarysite failą. Kai vėl jį atidarysite, turėsite juos nustatyti iš naujo. Tai nėra pats patogiausias būdas, nemanote?
Tačiau šią problemą galima išspręsti. Įterpkite Sustabdyti į funkcijos kodą reikiamais taškais, o programos vykdymą galite sustabdyti taip pat, kaip ir naudodami pertraukos taškus.
Kai VBA susiduria su Sustabdyti teiginį, jis sustabdys programos vykdymą ir lauks jūsų veiksmo. Patikrinkite kintamųjų vertes, tada paspauskite F5, kad tęstumėte darbą.
Arba paspauskite F8, jei norite atlikti funkciją palaipsniui, kaip aprašyta pirmiau.
Svetainė Sustabdyti teiginys yra programos dalis, todėl jis nėra pašalinamas, kaip tai daroma pertraukos taško atveju. Baigę derinti, pašalinkite jį patys. Arba paverskite jį komentaru, prieš jį įrašydami viengubą kabliataškį (').
Derinimas naudojant Debug.Print operatorių
Galite įdėti Debug.Print funkcijos kode reikiamoje vietoje. Tai naudinga tikrinant cikliškai kintančių kintamųjų vertes.
Toliau pateiktoje ekrano nuotraukoje matote Debug.Print veikimo pavyzdį.
Pareiškimas Debug.Print i, vMax spausdina reikšmes ir jų eilės numerius.
Immediate lange matome du skaičius (17 ir 14) iš pasirinkto intervalo, kuris atitinka nustatytas ribas ir iš kurių bus pasirinktas didžiausias. 1 ir 2 skaitmenys reiškia, kad funkcija atliko 2 ciklus, per kuriuos buvo pasirinkti skaičiai. Matome svarbiausių kintamųjų vertes, kaip ir anksčiau su MsgBox . Tačiau tai nesustabdė funkcijos.
Funkcijos iškvietimas iš procedūros
Vartotojo apibrėžtą funkciją galite iškviesti ne iš darbalapio langelio, o iš procedūros. Tokiu atveju visos klaidos bus rodomos "Visual Basic" redaktoriaus lange.
Štai kaip iš procedūros galima iškviesti naudotojo apibrėžtą funkciją GetMaxBerween:
Sub Testas() Dim x x = GetMaxBetween(Range ("A1:A6" ), 10, 50) MsgBox(x) End SubPastatykite žymeklį bet kurioje kodo vietoje ir paspauskite F5 . Jei funkcijoje nėra klaidų, bus rodomas iškylantysis langas su skaičiavimo rezultatais.
Klaidos atveju VBA redaktoriuje matysite atitinkamą pranešimą. Skaičiavimas bus sustabdytas, o kodo eilutė, kurioje įvyko klaida, bus paryškinta geltonai. Galite lengvai nustatyti, kur ir kodėl įvyko klaida.
Štai ir viskas. Dabar sukūrėte savo priedą, pridėjote jį prie "Excel" ir galite jame naudoti UDF. Jei norite naudoti daugiau UDF, tiesiog parašykite kodą priedo modulyje VBA redaktoriuje ir jį išsaugokite.
Štai ir viskas šiai dienai. Apžvelgėme įvairius pasirinktinių funkcijų derinimo būdus ir sužinojome, kaip jas naudoti darbalaukyje. Labai tikimės, kad šios gairės jums bus naudingos. Jei turite klausimų, rašykite šio straipsnio komentaruose.