Tabloya naverokê
Wekî ku hûn jixwe dizanin ku meriv çawa UDF-an biafirîne (û, ez hêvî dikim, we jî ceribandina wan li Excel-a xwe kiriye), werin em hinekî kûr bikolin û bibînin ka çi dikare were kirin ger fonksiyona weya ku ji bikarhênerê we hatî destnîşan kirin nexebite.
Ji bo ku hûn di afirandina fonksiyonek xwerû de hin pirsgirêkan çareser bikin, bi îhtîmalek mezin hewce ne ku hûn xeletiyek bimeşînin. Wê hingê hûn dikarin pê ewle bin ku fonksiyon rast dixebite.
Em ê teknîkên xeletkirinê yên jêrîn lêkolîn bikin:
Dema ku hûn fonksiyonek xwerû çêkin, her gav îhtîmalek heye ku hûn ê xeletiyek bikin. Fonksiyonên xwerû bi gelemperî pir tevlihev in. Û ew her gav zû dest bi xebatê nakin. Dibe ku formula encamek xelet an jî #VALUE vegerîne! şaşî. Berevajî fonksiyonên standard Excel, hûn ê ti peyamên din nebînin.
Gelo rêyek heye ku meriv gav bi gav fonksiyonek xwerû derbas bike da ku kontrol bike ka her yek ji daxuyaniyên wê çawa dixebite? Emîn! Debugkirin ji bo vê yekê tê bikaranîn.
Ez ê çend awayan pêşkêşî we bikim ku hûn fonksiyona xweya xwerû jêbirinê bikin, da ku hûn yê ku ji we re dixebite hilbijêrin.
Wek mînak, em fonksiyona xwerû bikar tînin GetMaxBetween ji yek ji gotarên meyên berê yên ku hejmara herî zêde di nav rêza diyarkirî ya nirxan de hesab dike:
Fonksiyon GetMaxBetween(rngCells Wek Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i Wek ReDim ReDim arrNums(rngCells.Count) Ji bo Her Hejmarek Di rngCellan de vMax =NumRange Hilbijêre Doza vMax Case MinNum + 0.01 To MaxNum - 0.01 arrNums(i) = vMax i = i + 1 Rewşa din GetMaxBetween = 0 Dawî Hilbijêre Next NumRange GetMaxBetween = WorksheetFunction.Max(arrNumsFonksiyon argumanên Dawî ne) rêza şaneyên ku hejmar lê têne nivîsandin, her weha sînorê jor û jêrîn nirxan.Fonksiyon MsgBox li cihên girîng bi cih bikin
Ji bo şopandina pêkanîna hesaban, hûn dikarin nîşan bidin. nirxên guherbarên herî girîng li ser ekranê li cihên rast. Ev dikare bi qutîkên diyalogê yên pop-up ve were kirin.
MsgBox qutiyek diyalogê ye ku hûn dikarin bikar bînin ku cûreyek peyamê nîşanî bikarhênerê bidin.
Sîntaksa MsgBox mîna fonksiyonên din ên VBA-yê ye:
MsgBox(prompt [, bişkok] [, sernav] [, dosya alîkarî, kontekst])prompt argumanek pêdivî ye. Ew peyama ku hûn di qutiya diyalogê de dibînin vedihewîne. Her weha dikare ji bo nîşandana nirxên guhêrbarên takekesî were bikar anîn.
Hemû argumanên din vebijarkî ne.
[ bişkokên ] - diyar dike ku kîjan bişkok û îkon in. di MsgBox de tê nîşandan. Mînak, heke em vebijarka vbOkOnly bikar bînin, wê demê tenê bişkoka OK dê were xuyang kirin. Tewra ku we ev arguman ji dest da jî, ev bişkok ji hêla xwerû ve tê bikar anîn.
[ sernav ] - li vir hûn dikarin sernavê qutiya peyamê diyar bikin.
Werin em ji peyvên ji bo pratîkê de û dest bi debugging. Ji bo nîşandanêpeyamê, xêza jêrîn li koda fonksiyona GetMaxBetween ya ku ji hêla bikarhêner ve hatî diyar kirin berî operatora Case Else zêde bike:
MsgBox vMax,, "Count -" & ezDi encamê de em ê çi bi dest bixin ev e:
Fonksiyon GetMaxBetween(rngCells Wek Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i Wek ReDim Intejimar arrNums(rngCells.Count) Ji bo Her NumRange Di rngCells de vMax = NumRange Hilbijêre Doza vMax Case MinNum + 0.01 To MaxNum - 0.01 arrNums (i) = vMax i = i + 1 MsgBox vMax,, "Hejmar -" & i Case Else GetMaxBetween = 0 Dawî Hilbijêre Next NumRange GetMaxBetween = WorksheetFunction.Max(arrNums) Fonksiyon DawîBi karanîna guherbara vMax di qutîka diyalogê de, em ê bibînin ka kîjan hejmar pîvanên hilbijartinê pêk tînin, ji ber vê yekê ku em dikarin ji wan mezintirîn hilbijêrin. Bi îfadeya "Hejmar -" & amp; Ez di barika sernavê de, em destnîşan dikin ka çend hejmar me berê hilbijartiye da ku nirxa herî zêde diyar bike. Dê jimarvan bi her nirxek nû re were zêdekirin.
Piştî ku me UDF-ya xwe saz kir, em formula jêrîn li rêza tarîxê bicîh dikin:
= GetMaxBetween (A1:A6,10,50)
Piştî bişkoka Enter tê pêçandin, hûn ê peyamek wekî di dîmena jêrîn de bibînin:
Ev hejmara yekem e di rêza A1: A6 de ku pîvanan pêk tîne: ji 10 mezintir lê kêmtir ji 50.
Piştî ku hûn OK bitikînin, peyamek duyemîn bi hejmara 14 xuya dibe. Hejmarên mayî bi hilbijartinê re li hev nakinpîvan. Ji ber vê yekê, fonksiyon ji her du nirxan derdikeve û ya herî mezin vedigerîne, 17.
Fonksiyon MsgBox dikare li cîhên herî girîng ên fonksiyona xwerû ya we were bikar anîn da ku meriv çawa nirxan kontrol bike. guherbarên takekesî diguhere. Dema ku we fonksiyonek mezin û gelek hesab heye qutiyên peyamê dikarin pir bikêr bin. Di vê rewşê de, wê ji we re hêsan be ku hûn diyar bikin ku xeletî di kîjan beşa kodê de çêdibe.
Xalên rawestanê destnîşan bikin û gav bi gav pêk bînin
Hûn dikarin xalên veqetînê li koda kodê zêde bikin. fonksiyona we ya ku dê pêkanîna kodê raweste. Ji ber vê yekê hûn dikarin pêvajoya hesabkirinê gav bi gav bişopînin. Bi vî awayî, hûn dikarin bibînin ka nirxên guhêrbaran çawa diguhezin.
Ji bo lêzêdekirina xalek veqetandinê, nîşanderê li ser xêza ku tê de îfadeya ku hûn lê rawestînin hildibijêrin bixin. Piştre rast-klîk bike û Debug -> Bişkojka Breakpoint an jî tenê F9 bitikîne. Her weha hûn dikarin li cîhê ku tê xwestin li devera gewr a vertîkal a li çepê koda fonksiyonê bikirtînin.
Çawa ku hûn di dîmena jêrîn de dibînin dê doreyek sor xuya bibe. Rêza kodê ya ku dê hesab lê bê rawestandin bi rengê sor tê ronî kirin.
Niha, paceya edîtorê VBA dê dema ku fonksiyon dimeşe vebe. Kursor dê li cihê ku hûn lê rawestiyane were danîn.
Heke hûn nîşana mişkê li ser yek ji guherbarên koda fonksiyonê bihêlin, hûn dikarin wana niha bibîninnirx:
F5 bitikîne da ku hesab berdewam bike.
Nîşe. Piştî xala veqetandinê, hûn dikarin gav bi gav dest bi şopandina pêşkeftina hesaban bikin. Heke hûn bişkojka F8-ê pê bikin, tenê yek rêzek din a koda VBA-ê dê were darve kirin. Xeta zer a bi tîrekê jî dê berbi pozîsyona kodê ya paşîn a darvekirî ve biçe.
Ji ber ku bicihanîna fonksiyonê dîsa tê sekinandin, hûn dikarin nirxên heyî yên hemî guhêrbarên fonksiyonê bi karanîna nîşana mişkê bibînin.
Pêkanîna paşîn a F8 dê me gavek pêşde bigire . Ji ber vê yekê hûn dikarin F8-ê heta dawiya hesabê pêl bikin. An jî bişkojka F5-ê bikirtînin da ku hesabkirin heya nuqteya şikestê ya din bidome.
Heke xeletiyek çêbibe, nîşanker dê li cîhê kodê ku xeletî lê derketiye were sekinandin. Û hûn ê jî peyamek çewtiyek pop-up bibînin. Ev yek hêsan dike ku meriv sedema pirsgirêkê diyar bike.
Xalên veqetînê yên ku hûn diyar dikin dê werin sepandin heya ku hûn pelê bigirin. Dema ku hûn wê ji nû ve vekin, hûn ê hewce bikin ku wan dîsa saz bikin. Ne rêbaza herî hêsan e, hûn nafikirin?
Lêbelê, ev pirsgirêk dikare were çareser kirin. Daxuyaniyek Stop têxe koda fonksiyonê di xalên pêwîst de, û hûn dikarin bi heman awayê ku dema ku xalên veqetînê bikar tînin, pêkanîna bernameyê rawestînin.
Dema ku VBA bi daxuyaniyek Stop re rû bi rû bimîne, ew ê pêkanîna bernameyê rawestîne û li benda çalakiya we bimîne. Dûv re nirxên guherbaran kontrol bikinji bo berdewamkirinê F5 bikirtînin.
An jî F8 bikirtînin da ku fonksiyona ku li jor hatî diyar kirin gav-gav bi cih bîne.
Daxuyaniya Stop beşek bernameyê ye û ji ber vê yekê ye. nayê jêbirin, wekî ku bi xala veqetandinê ye. Dema ku hûn xeletkirinê qediyan, wê bi xwe rakin. An jî wê bikin şîroveyek û pêşîya wê bi yek quote (').
Debugkirin bi kargêriya Debug.Print
Hûn dikarin Debug.Print bi cîh bikin. koda fonksiyonê li cîhê rast. Ev ji bo kontrolkirina nirxên guhêrbarên ku bi awayekî çerxa diguherin bikêr e.
Hûn dikarin mînakek performansa Debug.Print li ser dîmena jêrîn bibînin.
Daxuyaniya Debug.Çap bike i, vMax nirx û hejmarên wan ên rêzî çap dike.
Di pencereya Yekser de hûn du hejmarên (17 û 14) ji rêza hilbijartî dibînin, ku bi sînoran danîne û di nav wan de herî zêde dê were hilbijartin. Hêjmarên 1 û 2 tê vê wateyê ku fonksiyonê 2 çerxên ku tê de hejmar hatine hilbijartin qedandine. Em nirxên guherbarên herî girîng dibînin, wekî ku me berê bi MsgBox kir. Lê ev fonksiyon nesekinî.
Ji prosedurekê bangî fonksiyonek bikin
Hûn dikarin ne ji şaneyek di pelgeya xebatê de, lê ji prosedurekê gazî fonksiyonek diyarkirî ya bikarhêner bikin. Di vê rewşê de, dê hemî xeletî di pencereya Visual Basic Edîtorê de bêne xuyang kirin.
Li vir çawa hûn dikarin fonksiyona diyarkirî ya bikarhêner GetMaxBerween ji yekprosedur:
Sub Test() Dim x x = GetMaxBetween(Range ("A1:A6"), 10, 50) MsgBox(x) End SubKursorê li her derê kodê bi cih bikin û F5 bitikînin. Ger di fonksiyonê de xeletiyek tune be, hûn ê pencereyek paşîn bi encama hesabkirinê bibînin.
Heger xeletiyek çêbibe, hûn ê di edîtorê VBA de peyamek têkildar bibînin. Hesabkirin dê were sekinandin û rêza kodê ya ku tê de xeletî derketiye dê bi zer were ronî kirin. Hûn dikarin bi hêsanî nas bikin ku xeletî li ku û çima çêbû.
Tiştek ev e. Naha we pêveka xwe çêkir, wê li Excel zêde kir û hûn dikarin UDF-ê tê de bikar bînin. Heke hûn dixwazin bêtir UDF-an bikar bînin, tenê kodê di modula pêvekê de di edîtorê VBA-yê de binivîsin û hilînin.
Ev ji bo îro ye. Me bi awayên cihêreng veşartiye ku fonksiyonên xwerû jêbirin û fêr bûne ka meriv wan çawa di pirtûka xebata xwe de bikar tîne. Em bi rastî hêvî dikin ku hûn van rêbernameyên kêrhatî bibînin. Ger pirsên we hebin, di şîroveyên vê gotarê de binivîsin.