Edukien taula
Dagoeneko UDFak sortzen dakizunez (eta, espero dut, zure Excel-en ere aplikatzen saiatu zarela), sakon dezagun pixka bat eta ikus dezagun zer egin daitekeen zure erabiltzaileak definitutako funtzioak funtzionatzen ez badu.
Funtzio pertsonalizatu bat sortzean arazo batzuk konpontzeko, ziurrenik arazketa bat exekutatu beharko duzu. Orduan ziur egon zaitezke funtzioak behar bezala funtzionatzen duela.
Ondoko arazketa-teknika hauek aztertuko ditugu:
Funtzio pertsonalizatu bat sortzen duzunean, beti dago aukera bat. akats bat egingo duzula. Funtzio pertsonalizatuak nahiko konplexuak izan ohi dira. Eta ez dira beti behar bezala lanean berehala hasten. Baliteke formulak emaitza oker bat itzultzea edo # BALIOA! akatsa. Excel funtzio estandarrak ez bezala, ez duzu beste mezurik ikusiko.
Ba al dago funtzio pertsonalizatu bat urratsez urrats egiteko modurik bere adierazpen bakoitzak nola funtzionatzen duen egiaztatzeko? Noski! Horretarako arazketa erabiltzen da.
Zure funtzio pertsonalizatua arazteko hainbat modu eskainiko dizkizut, zuretzat lan egiten duzuna aukera dezazun.
Adibide gisa, funtzio pertsonalizatua erabiltzen dugu. GetMaxBetween zehaztutako balio-barrutian gehienezko kopurua kalkulatzen duen gure aurreko artikuluetako batetik:
Funtzioa GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i Integer ReDim arrNums(rngCells.Count) NumRange bakoitzeko rngCells vMax =NumRange Hautatu Case vMax Case MinNum + 0,01 To MaxNum - 0,01 arrNums(i) = vMax i = i + 1 Kasu Bestela GetMaxBetween = 0 End Hautatu Hurrengo NumRange GetMaxBetween = WorksheetFunction.Max (arrNums) End Funtzio argumentuakdira. zenbakiak idazten diren gelaxken barrutia, baita balioen goiko eta beheko muga ere.
Kokatu MsgBox funtzioa leku garrantzitsuetan
Kalkuluen exekuzioa kontrolatzeko, bistaratu dezakezu. pantailako aldagai garrantzitsuenen balioak leku egokietan. Hau pop-up elkarrizketa-koadroak erabiliz egin daiteke.
MsgBox erabiltzaileari mezu motaren bat erakusteko erabil dezakezun elkarrizketa-koadroa da.
MsgBox-en sintaxia VBA-ren beste funtzio batzuen antzekoa da:
MsgBox(gonbidapena [, botoiak] [, izenburua] [, laguntza-fitxategia, testuingurua])galdera nahitaezko argumentua da. Elkarrizketa-koadroan ikusten duzun mezua dauka. Aldagai indibidualen balioak bistaratzeko ere erabil daiteke.
Beste argumentu guztiak aukerakoak dira.
[ botoiak ] - zein botoi eta ikono diren zehazten du. MsgBox atalean bistaratuko da. Adibidez, vbOkOnly aukera erabiltzen badugu, Ados botoia soilik bistaratuko da. Argumentu hau galdu baduzu ere, botoi hau lehenespenez erabiltzen da.
[ title ] - hemen mezu-koadroaren izenburua zehaztu dezakezu.
Alda gaitezen landu eta arazketa hasteko hitzak. bistaratzekomezua, gehitu hurrengo lerroa GetMaxBetween erabiltzaileak definitutako funtzioaren kodeari Case Else operadorearen aurretik:
MsgBox vMax,, "Count -" & iHona hemen emaitzan lortuko duguna:
Funtzioa GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.Count) rngCells-en NumRange bakoitzerako vMax = NumRange Hautatu Case vMax Case MinNum + 0,01 To MaxNum - 0,01 arrNums(i) = vMax i = i + 1 MsgBox vMax,, "Count -" & i Kasua Bestela GetMaxBetween = 0 Amaiera Hautatu Hurrengo NumRange GetMaxBetween = WorksheetFunction.Max(arrNums) Amaiera FuntzioaElkarrizketa-koadroko vMax aldagaia erabiliz, hautatzeko irizpideak betetzen dituzten zenbakiek ikusiko dugu, beraz horietako handienak hauta ditzakegula. "Kontatu -" esapidearekin & I titulu-barran, zenbat zenbaki hautatu ditugun adieraziko dugu gehienezko balioa zehazteko. Balio berri bakoitzarekin kontagailua handituko da.
Gure UDF ezarrita dugunean, beheko formula aplikatuko diogu data-tarteari:
= GetMaxBetween (A1:A6,10,50)
Sartu botoiaren ondoren sakatzen denean, mezu bat ikusiko duzu beheko pantaila-argazkian bezala:
Hau da irizpideak betetzen dituen A1: A6 barrutiko lehen zenbakia: 10 baino handiagoa baina txikiagoa 50 baino.
Ados sakatu ondoren, bigarren mezu bat agertzen da 14 zenbakiarekin. Gainerako zenbakiak ez datoz bat hautapenarekinirizpideak. Beraz, funtzioa irten eta bi balioetatik handiena itzultzen du, 17.
MsgBox funtzioa zure funtzio pertsonalizatuko leku garrantzitsuenetan erabil daiteke balioak nola kontrolatzeko. aldagai indibidualen aldaketa. Mezu-kutxak oso erabilgarriak izan daitezke funtzio handia eta kalkulu asko dituzunean. Kasu honetan, erraza izango zaizu errorea kodearen zein zatitan gertatzen den zehaztea.
Zehaztu geldiune-puntuak eta egin urratsez urrats
Eten-puntuak gehi ditzakezu kodeari. kodearen exekuzioa geldituko den zure funtzioa. Beraz, kalkulu-prozesua urratsez urrats jarraitu dezakezu. Horrela, aldagaien balioak nola aldatzen diren ikus dezakezu.
Eten-puntua gehitzeko, jarri kurtsorea pausatzea aukeratzen duzun adierazpena duen lerroan. Ondoren, egin klik eskuineko botoiarekin eta hautatu Araztu -> Aldatu eten puntua edo sakatu F9. Funtzio-kodearen ezkerrean dagoen eremu gris bertikalean nahi duzun lekuan ere klik egin dezakezu.
Zirkulu gorri bat agertuko da, beheko pantaila-argazkian ikus dezakezun bezala. Kalkulua geldituko den kode-lerroa gorriz nabarmenduta dago.
Orain, VBA editorearen leihoa irekiko da funtzioa martxan dagoenean. Kurtsorea gelditu zaren puntuan kokatuko da.
Saguaren kurtsorea funtzio-kodeko aldagairen baten gainean jartzen baduzu, bere uneko unea ikus dezakezu.balioa:
Sakatu F5 kalkuluarekin jarraitzeko.
Oharra. Eten-puntuaren ondoren, urratsez urrats kalkuluen aurrerapena jarraitzen has zaitezke. F8 botoia sakatzen baduzu, VBA kodearen hurrengo lerro bakarra exekutatuko da. Gezi bat duen marra horia ere exekutatutako azken kodearen posiziora mugituko da.
Funtzioaren exekuzioa berriro pausatzen denez, funtzioaren aldagai guztien egungo balioak ikus ditzakezu saguaren kurtsorea erabiliz.
F8 sakatzeak urrats bat aurrera eramango gaitu. . Beraz, F8 sakatu dezakezu kalkulua amaitu arte. Edo sakatu F5 kalkuluarekin jarraitzeko hurrengo eten-puntura arte.
Erroreren bat gertatzen bada, kurtsorea akatsa gertatu den kodearen puntuan geldituko da. Eta pop-up errore-mezu bat ere ikusiko duzu. Honek arazoaren kausa zehaztea errazten du.
Zehazten dituzun eten-puntuak fitxategia itxi arte aplikatuko dira. Berriro irekitzen duzunean, berriro ezarri beharko dituzu. Ez da metodorik erosoena, ez duzu uste?
Hala ere, arazo hau konpondu daiteke. Sartu Stop adierazpena funtzio-kodean beharrezko puntuetan, eta programaren exekuzioa eten dezakezu eten-puntuak erabiltzen dituzunean bezala.
VBA-k Stop adierazpena aurkitzen duenean, programaren exekuzioa geldituko da eta zure ekintzaren zain egongo da. Egiaztatu aldagaien balioak, orduansakatu F5 jarraitzeko.
Edo sakatu F8 funtzioa urratsez urrats betetzeko goian azaldu bezala.
Stop adierazpena programaren parte da eta, beraz, ez da ezabatu, eten puntu batekin gertatzen den bezala. Arazketa amaitzen duzunean, kendu zuk zeuk. Edo bihurtu iruzkin bat komatxo bakar batekin (') aurretik jarriz.
Debug.Print operadorea erabiliz araztea
Debug.Print atalean jar dezakezu. funtzio-kodea leku egokian. Baliagarria da ziklikoki aldatzen ari diren aldagaien balioak egiaztatzeko.
Debug.Print-en errendimenduaren adibide bat ikus dezakezu beheko pantaila-argazkian.
Statement Debug.Print i, vMax balioak eta haien zenbaki ordinalak inprimatzen ditu.
Berehalako leihoan aukeratutako barrutitik bi zenbaki (17 eta 14) ikusiko dituzu, hau da. mugak ezarri eta horien artean gehienezkoa hautatuko da. 1 eta 2 zifrek esan nahi dute funtzioak zenbakiak hautatu diren 2 ziklo bete dituela. Aldagai garrantzitsuenen balioak ikusten ditugu, lehenago MsgBox -rekin egin genuen bezala. Baina horrek ez zuen funtzioa gelditu.
Prozedura batetik funtzio bat deitu
Erabiltzaileak definitutako funtzio bati dei diezaiokezu ez lan-orriko gelaxka batetik, prozedura batetik baizik. Kasu honetan, errore guztiak Visual Basic editorearen leihoan agertuko dira.
Hona hemen erabiltzaileak definitutako GetMaxBerween funtzioari nola deitu dezakezun batetik.prozedura:
Sub Test() Dim x x = GetMaxBetween(Range ( "A1:A6" ), 10, 50) MsgBox(x) End SubKokatu kurtsorea kodean edozein lekutan eta sakatu F5 . Funtzioan errorerik ez badago, leiho laster bat ikusiko duzu kalkuluaren emaitzarekin.
Erroreren bat izanez gero, dagokion mezua ikusiko duzu VBA editorean. Kalkulua geldituko da eta akatsa gertatu den kode-lerroa horiz nabarmenduko da. Erraz identifikatu dezakezu non eta zergatik gertatu den errorea.
Hori da guztia. Orain zure gehigarria sortu duzu, Excel-en gehitu eta bertan UDF erabil dezakezu. UDF gehiago erabili nahi badituzu, idatzi kodea VBA editoreko gehigarri-moduluan eta gorde.
Hori da gaurkoa. Funtzio pertsonalizatuak arazteko modu desberdinak aztertu ditugu eta lan-koadernoan nola erabiltzen diren ikasi dugu. Benetan espero dugu jarraibide hauek lagungarriak izatea. Galderarik baduzu, idatzi artikulu honetako iruzkinetan.