Excel UDF ez dabil: arazoak eta irtenbideak

  • Partekatu Hau
Michael Brown

Artikulu honetan, lan-liburuetako funtzio pertsonalizatuak erabiltzean izan ditzakezun arazoei erreparatuko diegu. Zerk eragiten dituen eta zein erraz konpon daitezkeen erakusten saiatuko naiz.

Hona hemen zertaz hitz egingo dugun:

    Lehenago zertaz hitz egin genuen. funtzio pertsonalizatua da, nola sortu eta nola erabili. Aldez aurretik UDFen oinarrizko ezagutzak freskatu behar dituzula iruditzen bazaizu, egin pausatu eta begiratu nire aurreko artikuluan.

    Zergatik ez da Excel UDF berriro kalkulatzen?

    Aldaketarik egiten duzunean. zure lan-koadernoa, Excel-ek ez ditu berriro kalkulatuko bertan dituzun formula guztiak. Aldatutako gelaxkekin soilik lotuta dauden formulen emaitzak eguneratuko ditu.

    Baina hau Excel funtzio estandarrei dagokie. Ohikoei dagokienez, Excel-ek ezin du VBA kodea balioztatu eta funtzio pertsonalizatuaren emaitzan eragina izan dezaketen beste gelaxka batzuk identifikatu. Hori dela eta, baliteke zure formula pertsonalizatua ez aldatzea lan-liburuan aldaketak egiten dituzunean.

    Arazoa konpontzeko, Application.Volatile adierazpena besterik ez duzu erabili beharko. Begiratu hurrengo kapitulua nola aplikatu jakiteko urratsez urrats.

    Funtzio pertsonalizatu lurrunkorrak eta ez lurrunkorrak

    Lehenespenez, Excel-en funtzio pertsonalizatuak ez dira aldakor. Horrek esan nahi du UDFa berriro kalkulatzen dela aipatzen duen edozein gelaxkaren balioa aldatzen bada soilik. Baina gelaxken formatua bada, izenalan-orria, fitxategiaren izena aldatuko da, orduan ez da aldaketarik gertatuko UDFn.

    Joan gaitezen hitzetatik adibideetara. Adibidez, zure lan-liburuaren izena gelaxka batean idatzi behar duzu. Horretarako, funtzio pertsonalizatu bat sortuko duzu:

    Function WorkbookName() As String WorkbookName = ThisWorkbook.Name End Function

    Orain imajinatu hurrengo kasua. Formula pertsonalizatua idatzi duzu =WorkbookName() gelaxkan eta fitxategiaren izena hor lortu duzu. Denbora batean, fitxategiari izena aldatzea erabaki zenuen eta beste izen batekin gorde zenuen. Baina gelaxkako balioari begiratu eta ez dela aldatu ikusten duzu. Fitxategi-izen zahar bat dago oraindik egokia ez dena.

    Funtzio honetan argumenturik ez dagoenez, funtzioa ez da berriro kalkulatzen (lan-liburuaren izena aldatu, itxi eta berriro ireki arren). it).

    Oharra. Zure fitxategiko funtzio guztiak berriro kalkulatzeko, Ctrl + Alt + F9 lasterbidea erabil dezakezu.

    Ba al dago modu errazagoa? Formula lan-orria aldatzen den bakoitzean berriro kalkulatzeko, kode-lerro gehigarri bat behar duzu. Itsatsi kode-zati hau zure funtzioaren hasieran:

    Aplikazioa.Lurrunkorra

    Beraz, zure kodea honela izango da:

    Funtzioa WorkbookName() String Application.Volatile WorkbookName = ThisWorkbook.Name End Function

    Orain zure UDF lurrunkorra da, beraz, automatikoki berriro kalkulatuko da lan-orriko gelaxkaren bat badaberriro kalkulatu da edo lan-koadernoan aldaketaren bat gertatu da. Fitxategiaren izena aldatu bezain laster, berehala ikusiko duzu eguneratze hori.

    Oharra. Kontuan izan funtzio lurrunkor gehiegik zure Excel moteldu dezaketela. Azken finean, kalkulu konplexuak egiten dituzten eta datu-tarte handietan etengabe funtzionatzen duten funtzio pertsonalizatu gehiegi daude.

    Horregatik, hegazkortasuna benetan beharrezkoa den tokian soilik erabiltzea gomendatzen dut.

    Zergatik ez dauden funtzio pertsonalizatuak erabilgarri

    Funtzio pertsonalizatu baten izenaren lehen letrak sartzen dituzunean, agertzen da. sarrerako gelaxkaren ondoan dagoen goitibeherako zerrendan, Excel funtzio estandarrak bezala.

    Hala ere, hori ez da beti gertatzen. Zein akatsek eragin dezakete egoera hau?

    Excel 2003-2007 baduzu, UDF ez da inoiz agertzen goitibeherako zerrendan. Bertan funtzio estandarrak soilik ikus ditzakezu.

    Baina Excel-en bertsio berriago bat erabiltzen ari bazara ere, ustekabean egin dezakezun beste akats bat dago.

    Ikusten duzu, funtzio pertsonalizatuak hemen egon behar du. Moduluak izeneko VBA modulu estandarra. Funtzio-kodea idazteko modulu berri bat gehitzen duzunean, Moduluak karpeta bat sortzen da automatikoki eta bertan modulu guztiak idazten dira.

    Baina batzuetan gertatzen da modulu berri bat ez egotea. sortzen lortzea. Hurrengo pantaila-argazkian ikus dezakezu funtzio pertsonalizatuaren kodea "Microsoft Excel Objects" moduluan dagoela.Lan-koaderno hau.

    Kontua da ezin duzula funtzio pertsonalizaturik jarri lan-orri edo liburuko kode-eremuan. Kasu honetan, funtzioak ez du funtzionatuko. Gainera, ez da funtzioen goitibeherako zerrendan agertuko. Hori dela eta, kodeak Moduluak karpetan egon behar du beti.

    Excel funtzio pertsonalizatuaren laguntza testua ez da bistaratzen

    Itsatsi duzunean ikusten duzun iradokizuna gerta daiteke beste arazo bat. funtzio pertsonalizatu bat. Funtzio estandar bat erabiltzen baduzu, beti ikusiko duzu funtzioaren argibide bat eta bere argumentuetarako. Baina zer gertatzen da UDFekin?

    Funtzio pertsonalizatu asko badituzu, oso zaila izango zaizu haietako bakoitzak zer kalkulu egiten dituen gogoratzea. Are zailagoa izango da zein argudio erabili gogoratzea. Uste dut ideia ona izango dela zure funtzio pertsonalizatuen deskribapena gogorarazle gisa.

    Horretarako, Application.MacroOptions metodoa erabiltzea gomendatuko nuke. Funtzioaren morroiaren leihoan funtzioaren deskribapena ez ezik bere argumentu bakoitzaren deskribapena ere erakusten lagunduko dizu. Formula-barrako Fx botoian klik egiten duzunean ikusiko duzu leiho hau.

    Ikus dezagun nola gehitu horrelako aholku bat zure UDF-etara. Aurreko artikuluan GetMaxBetween funtzio pertsonalizatua aztertu genuen. Zehaztutako barrutian gehienezko kopurua aurkitzen du eta hiru argumentu hartzen ditu: zenbakizko balioen sorta eta gehienezko eta gutxieneko balio bat.bilatu.

    Orain funtzio pertsonalizatu honen deskribapen bat gehituko dugu. Horretarako, sortu eta exekutatu Aplikazioa.MacroOptions komandoa. GetMaxBetween funtziorako, komando hau exekutatu dezakezu:

    Sub RegisterUDF () Dim strFuncName As String 'erregistratu nahi duzun funtzioaren izena Dim strDescr As String ' funtzioaren deskribapena bera Dim strArgs () As String 'funtzioaren argumentuen deskribapena' Erregistratu GetMaxBetween funtzioa ReDim strArgs (1 To 3) 'Number of arguments in your function strFuncName = "GetMaxBetween" strDescr = "Zehaztutako barrutian gehienezko kopurua" strArgs (1) = "Range of numeric values" strArgs (2) = "Beheko tartearen ertza " strArgs (3) = " Goiko tartearen ertza " Aplikazioa.MacroOptions Makroa: = strFuncName, _ Deskribapena: = strDescr, _ ArgumentDescriptions: = strArgs, _ Kategoria: = " Nire funtzio pertsonalizatuak " End Sub

    or

    Sub RegisterUDF () Application.MacroOptions Macro: = "GetMaxBetween" , _ Description: = "Gehienezko kopurua zehaztutako barrutian" , _ Kategoria: = "Nire Funtzio pertsonalizatuak" , _ ArgumentDescriptions: = Array (_ "Zenbakizko balioen sorta" , _ "Beheko tartea bor der" , _ "Upper interval border" ) End Sub

    Aldagaia str FuncName funtzioaren izena da. strDescr - funtzioaren deskribapena. strArgs aldagaiek argumentu bakoitzeko aholkuak dituzte.

    Zein den laugarren argumentua galde dezakezu.Aplikazioa.MakroAukerak. Aukerako argumentu honek Category izena du eta gure GetMaxBetween () funtzio pertsonalizatuak jarriko dituen Excel funtzioen klasea adierazten du. Lehendik dauden kategorietako edozeinen ondoren izendatu dezakezu: Matematika eta amp. ; Trig, Estatistika, Logikoa, etab. Sortzen dituzun funtzioak kokatuko dituzun kategoria berrirako izen bat zehaztu dezakezu. Kategoria argumentua erabiltzen ez baduzu, funtzio pertsonalizatua automatikoki jarriko da "Erabiltzaileak definitutako" kategorian.

    Itsatsi funtzio-kodea moduluaren leihoan:

    Ondoren, egin klik "Exekutatu" botoian. Komandoak Fx botoia erabiltzeko ezarpen guztiak egingo ditu zure GetMaxBetween() funtzioarekin.

    Funtzio bat gelaxka batean sartzen saiatzen bazara Txertatu funtzioa tresna, zure GetMaxBetween funtzioa "Nire funtzio pertsonalizatuak" kategorian dagoela ikusiko duzu:

    Zuk. funtzioaren izena gelaxkan idazten has zaitezke eta zure funtzio pertsonalizatua ikusiko duzu aukeratzeko funtzioen goitibeherako zerrendan.

    Ondoren, deitu Funtzioen morroia. Fx botoiarekin.

    Aholkua. CRTL + A tekla-konbinazioa ere erabil dezakezu Funtzioen morroia irekitzeko.

    Funtzioen morroia leihoan zure funtzioaren deskribapena ikusiko duzu, baita lehen argumenturako aholkua ere. Kurtsorea gainean jartzen baduzubigarren edo hirugarren argumentua, haientzako aholkuak ere ikusiko dituzu.

    Aholku hauen testua aldatu nahi baduzu, aldatu strDescr eta strArgs aldagaiak RegisterUDF () kodean. Ondoren, exekutatu RegisterUDF () komandoa berriro.

    Egindako ezarpen guztiak desegin eta funtzioaren deskribapena garbitu nahi baduzu, exekutatu kode hau:

    Sub UnregisterUDF () Aplikazioa.MacroOptions Makroa: = "GetMaxBetween" , _ Deskribapena: = Hutsik , ArgumentDescriptions: = Hutsik , Kategoria: = Hutsik Amaiera Sub

    Badago beste modu bat iradokizun bat lortzeko funtzio pertsonalizatu bat sartzen duzunean. Sartu funtzioaren izena eta sakatu Ctrl + Shift + A :

    =GetMaxBetween( + Ctrl + Shift + A

    Funtzioaren argumentu guztien zerrenda ikusiko duzu:

    Tamalez, hemen ez duzu funtzioaren deskribapena eta bere argumentuak ikusiko. Baina argudioen izenak nahiko informatiboak badira, lagungarriak izan daitezke. Hala ere, ezer baino hobea da :)

    Lan apur bat gehiago beharko da Excel funtzio estandarrak bezala funtzionatzen duten UDFetarako intellisense sortzeko. Zoritxarrez, Microsoft-ek ez du aukerarik eskaintzen. Gaur egun eskuragarri dagoen irtenbide bakarra Excel-DNA IntelliSense luzapena da. Garatzailearen webgunean informazio gehiago aurki dezakezu.

    Zorionez, jarraibide hauek arazoak konpontzen lagunduko dizute zure funtzio pertsonalizatuak funtzionatzen ez duenean edo funtzionatzen ez duenean.nahi duzun bezala lan egin. Hala ere, zure UDFk funtzionatzen ez badu, deskribatu zure arazoa zehatz-mehatz Iruzkinen atalean. Saiatuko gara asmatzen eta zuretzat irtenbidea aurkitzen ;)

    Michael Brown teknologia-zale dedikatua da, software-tresnak erabiliz prozesu konplexuak sinplifikatzeko grina duena. Hamarkada bat baino gehiagoko esperientzia duen teknologia-industrian, Microsoft Excel eta Outlook-en eta Google Sheets eta Docs-en trebetasunak landu ditu. Michael-en bloga bere ezagutzak eta esperientziak besteekin partekatzera zuzenduta dago, produktibitatea eta eraginkortasuna hobetzeko aholku eta tutorial errazak eskaintzen ditu. Profesional ondua edo hasiberria izan, Michael-en blogak informazio baliotsuak eta aholku praktikoak eskaintzen ditu funtsezko software-tresna horiei etekinik handiena ateratzeko.