Excel UDF ddim yn gweithio: problemau ac atebion

  • Rhannu Hwn
Michael Brown

Yn yr erthygl hon, byddwn yn edrych ar y materion y gallech eu hwynebu wrth ddefnyddio swyddogaethau personol yn eich llyfrau gwaith. Byddaf yn ceisio dangos i chi beth sy'n eu hachosi a pha mor hawdd y gellir eu datrys.

Dyma beth y byddwn yn siarad amdano:

    Yn gynharach buom yn siarad am beth a swyddogaeth arferiad yw, sut i'w greu a'i ddefnyddio. Os ydych chi'n teimlo bod angen i chi adnewyddu gwybodaeth sylfaenol UDFs ymlaen llaw, cymerwch saib ac edrychwch drwy fy erthygl flaenorol.

    Pam nad yw Excel UDF yn ailgyfrifo?

    Pan fyddwch yn gwneud unrhyw newidiadau yn eich llyfr gwaith, ni fydd Excel yn ailgyfrifo pob fformiwla sydd gennych yno. Bydd yn diweddaru'r canlyniadau ar gyfer y fformiwlâu hynny sy'n gysylltiedig â'r celloedd wedi'u newid yn unig.

    Ond mae hyn yn ymwneud â swyddogaethau safonol Excel. O ran y rhai arfer, ni all Excel ddilysu'r cod VBA a nodi celloedd eraill a allai hefyd effeithio ar ganlyniad y swyddogaeth arferiad. Felly, mae'n bosibl na fydd eich fformiwla bersonol yn newid pan fyddwch yn gwneud newidiadau i'r llyfr gwaith.

    I drwsio'r mater, bydd angen i chi ddefnyddio'r datganiad Application.Volatile yn unig. Edrychwch ar y bennod nesaf i ddysgu'r cyfarwyddiadau cam wrth gam ar sut i'w gymhwyso.

    Swyddogaethau personol anweddol yn erbyn anweddol

    Yn ddiofyn, nid yw swyddogaethau personol yn Excel yn gyfnewidiol. Mae hyn yn golygu mai dim ond os yw gwerth unrhyw un o'r celloedd y mae'n cyfeirio atynt yn newid y caiff yr UDF ei ailgyfrifo. Ond os yw fformat y celloedd, enw'rtaflen waith, enw'r ffeil yn newid, yna ni fydd unrhyw newidiadau yn digwydd yn yr UDF.

    Gadewch i ni newid o eiriau i enghreifftiau. Er enghraifft, mae angen i chi ysgrifennu enw eich llyfr gwaith mewn cell. I wneud hyn, rydych chi'n creu ffwythiant wedi'i deilwra:

    Function WorkbookName() Fel String WorkbookName = ThisWorkbook.Name Swyddogaeth Diwedd

    > Nawr dychmygwch yr achos canlynol. Ysgrifennoch chi fformiwla arferiad =WorkbookName()i'r gell a chael enw'r ffeil yno. Mewn ychydig, fe wnaethoch chi benderfynu ailenwi'r ffeil a'i chadw gydag enw gwahanol. Ond rydych chi'n edrych ar y gwerth yn y gell ac yn gweld nad yw wedi newid. Mae yna hen enw ffeil o hyd nad yw'n gywir bellach.

    Gan nad oes dadleuon yn y ffwythiant yma, nid yw'r ffwythiant wedi ei ail-gyfrifo (hyd yn oed os newidiwch enw'r llyfr gwaith, caewch ef, ac yna ailagor iddo).

    Nodyn. I ailgyfrifo'r holl swyddogaethau yn eich ffeil, gallwch ddefnyddio'r llwybr byr Ctrl + Alt + F9.

    A oes ffordd haws? Er mwyn gwneud i'r fformiwla ailgyfrifo bob tro y bydd y daflen waith yn newid, mae angen llinell ychwanegol o god arnoch. Gludwch y darn canlynol o god ar ddechrau eich swyddogaeth:

    Application.Volatile

    Felly, bydd eich cod yn edrych fel hyn:

    Swyddogaeth WorkbookName() Fel Llinynnol Application.Volatile WorkbookName = ThisWorkbook.Name Swyddogaeth Derfynol

    >

    Nawr mae eich UDF yn gyfnewidiol, felly caiff ei ailgyfrifo'n awtomatig os oes unrhyw gell yn y daflen waithwedi cael ei ailgyfrifo neu unrhyw newid wedi digwydd yn y llyfr gwaith. Cyn gynted ag y byddwch yn newid enw'r ffeil, fe welwch y diweddariad hwnnw ar unwaith.

    Sylwch. Cofiwch y gall gormod o swyddogaethau anweddol arafu eich Excel. Wedi'r cyfan, mae gormod o swyddogaethau arfer sy'n perfformio cyfrifiadau cymhleth ac yn gweithredu ar ystodau data mawr yn barhaus.

    Felly, rwy'n argymell defnyddio anweddolrwydd dim ond lle mae ei wir angen.

    Pam nad yw ffwythiannau personol ar gael

    Pan fyddwch yn rhoi llythrennau cyntaf enw ffwythiant personol, mae'n ymddangos yn y gwymplen nesaf at y gell fewnbwn, yn union fel swyddogaethau safonol Excel.

    Fodd bynnag, nid yw hyn yn digwydd bob amser. Pa gamgymeriadau all achosi'r sefyllfa hon?

    Os oes gennych Excel 2003-2007, yna nid yw'r UDF byth yn ymddangos yn y gwymplen. Yma gallwch weld swyddogaethau safonol yn unig.

    Ond hyd yn oed os ydych yn defnyddio fersiwn mwy diweddar o Excel, mae camgymeriad arall y gallwch ei wneud yn ddamweiniol. modiwl VBA safonol o'r enw Modiwlau. Pan fyddwch chi'n ychwanegu modiwl newydd i ysgrifennu'r cod swyddogaeth, mae ffolder Modiwlau yn cael ei greu'n awtomatig lle mae'r holl fodiwlau wedi'u hysgrifennu.

    Ond weithiau mae'n digwydd nad yw modiwl newydd cael eu creu. Ar y llun nesaf gallwch weld bod y cod swyddogaeth arferiad yn y modiwl “Microsoft Excel Objects” ynghyd âThisWorkbook.

    Y pwynt yw na allwch osod ffwythiant addasedig yn ardal cod taflen waith neu lyfr gwaith. Yn yr achos hwn, ni fydd y swyddogaeth yn gweithio. Ar ben hynny, ni fydd yn ymddangos yn y gwymplen o swyddogaethau. Felly, dylai'r cod fod yn y ffolder Modiwlau bob amser.

    Nid yw testun cymorth swyddogaeth arferiad Excel yn cael ei ddangos

    Gall problem arall godi yw'r awgrym a welwch wrth gludo swyddogaeth arferiad. Os ydych chi'n defnyddio swyddogaeth safonol, byddwch bob amser yn gweld cyngor ar gyfer y swyddogaeth ac ar gyfer ei dadleuon. Ond beth am UDFs?

    Os oes gennych chi lawer o swyddogaethau personol, bydd yn anodd iawn i chi gofio pa gyfrifiadau y mae pob un ohonynt yn eu gwneud. Bydd yn anoddach fyth cofio pa ddadleuon i'w defnyddio. Rwy'n meddwl y bydd yn syniad da cael disgrifiad o'ch swyddogaethau personol i'ch atgoffa.

    Ar gyfer hyn, byddwn yn awgrymu defnyddio'r dull Application.MacroOptions . Bydd yn eich helpu i ddangos y disgrifiad o nid yn unig y swyddogaeth ond hefyd o bob un o'i ddadleuon yn y ffenestr Swyddogaeth Dewin. Rydych chi'n gweld y ffenestr hon pan fyddwch chi'n clicio ar y botwm Fx yn y bar fformiwla.

    Gadewch i ni weld sut i ychwanegu awgrym o'r fath at eich UDFs. Yn yr erthygl flaenorol buom yn edrych ar swyddogaeth arfer GetMaxBetween. Mae'n dod o hyd i'r nifer mwyaf yn yr ystod benodedig ac mae'n cymryd tair dadl: ystod o werthoedd rhifol, ac uchafswm ac isafswm gwerth ichwiliwch am.

    Nawr byddwn yn ychwanegu disgrifiad ar gyfer y swyddogaeth arferiad hon. I wneud hyn, crëwch a rhedwch y gorchymyn Application.MacroOptions . Ar gyfer y ffwythiant GetMaxBetween , gallwch redeg y gorchymyn canlynol:

    Sub RegisterUDF () Dim strFuncName Fel Llinyn 'enw'r ffwythiant rydych am ei gofrestru Dim strDescr Fel Llinyn' disgrifiad o'r ffwythiant ei hun Dim strArgs ( ) Fel Llinyn ' disgrifiad o ddadleuon ffwythiant ' Cofrestrwch ffwythiant GetMaxBetween ReDim strArgs (1 I 3) ' Nifer y dadleuon yn eich ffwythiant strFuncName = " GetMaxBetween " strDescr = "Uchafswm nifer yn yr amrediad penodedig" strArgs (1) = " Ystod o werthoedd rhifol " strArgs (2) = " Ffin cyfwng isaf " strArgs (3) = " Ffin cyfwng uchaf " Application.MacroOptions Macro: = strFuncName, _ Description: = strDescr, _ ArgumentDescriptions: = strArgs, _ Categori: = " Fy Swyddogaethau Personol " Diwedd Is

    neu

    Is-gofrestrUDF ( ) Application.MacroOptions Macro: = " GetMaxBetween " , _ Description: = " Uchafswm nifer yn yr amrediad penodedig " , _ Categori: = " Fy Swyddogaethau Personol " , _ ArgumentDescriptions: = Arae (_ "Ystod o werthoedd rhifol" , _ " Bore cyfwng is der", _ "Border cyfwng uchaf" ) Diwedd Is

    Amrywiadwy str FuncName yw enw'r ffwythiant. strDescr - disgrifiad ffwythiant. Mae'r newidynnau strArgs yn cynnwys awgrymiadau ar gyfer pob dadl.

    Efallai y byddwch chi'n meddwl tybed beth yw'r bedwaredd ddadl iApplication.MacroOptions. Enw'r arg ddewisol hon yw Categori ac mae'n dynodi'r dosbarth o swyddogaethau Excel y bydd ein ffwythiant GetMaxBetween () arferiad yn cael ei osod ynddo. Gallwch ei enwi ar ôl unrhyw un o'r categorïau presennol: Math & ; Trig, Ystadegol, Rhesymegol, ac ati Gallwch nodi enw ar gyfer y categori newydd y byddwch yn gosod y swyddogaethau rydych yn eu creu ynddo. Os nad ydych yn defnyddio'r arg Categori, yna bydd y ffwythiant personol yn cael ei osod yn awtomatig yn y categori "Defnyddiwr Diffiniedig".

    Gludwch y cod swyddogaeth i ffenestr y modiwl:

    1>

    Yna cliciwch ar y botwm “Run”. Bydd y gorchymyn yn perfformio'r holl osodiadau ar gyfer defnyddio'r botwm Fx gyda'ch ffwythiant GetMaxBetween() .

    Os ceisiwch fewnosod ffwythiant i mewn i gell gan ddefnyddio'r Offeryn Mewnosod Swyddogaeth , fe welwch fod eich swyddogaeth GetMaxBetween yn y categori "Fy Swyddogaethau Personol":

    Chi gallwch ddechrau teipio enw'r ffwythiant i'r gell a byddwch yn gweld eich ffwythiant personol yn y gwymplen o swyddogaethau i ddewis o'u plith. gyda'r botwm Fx.

    Awgrym. Gallwch hefyd ddefnyddio'r cyfuniad allweddol CRTL + A i agor y Dewin Swyddogaeth.

    Yn y ffenestr Dewin Swyddogaeth fe welwch ddisgrifiad o'ch swyddogaeth, yn ogystal ag awgrym ar gyfer y ddadl gyntaf. Os byddwch yn gosod eich cyrchwr dros yail neu drydedd arg, byddwch hefyd yn gweld awgrymiadau ar eu cyfer.

    Os ydych am newid testun yr awgrymiadau hyn, newidiwch werthoedd y strDescr a strArgs newidyn yn y cod RegisterUDF () . Yna rhedwch y gorchymyn RegisterUDF() eto.

    Os ydych chi am ddadwneud yr holl osodiadau a wnaed a chlirio disgrifiad y ffwythiant, rhedwch y cod hwn:

    Sub UnregisterUDF () Application.MacroOptions Macro: = "GetMaxBetween" , _ Description: = Gwag , ArgumentDescriptions: = Gwag , Categori: = Is Pen Gwag

    Mae un ffordd arall i gael awgrym pan fyddwch yn mynd i mewn i ffwythiant arbennig. Rhowch enw'r ffwythiant ac yna pwyswch y Ctrl + Shift + A :

    =GetMaxBetween( + Ctrl + Shift + A

    Fe welwch restr o holl ddadleuon y ffwythiant:

    Yn anffodus, ni welwch y disgrifiad o'r swyddogaeth a'i dadleuon yma. Ond os yw enwau'r dadleuon yn eithaf addysgiadol, efallai y byddant yn ddefnyddiol hefyd. Eto i gyd, mae'n well na dim :)

    Bydd yn cymryd ychydig mwy o waith i greu deallusrwydd ar gyfer UDFs sy'n gweithio fel swyddogaethau Excel safonol. Yn anffodus, nid yw Microsoft yn darparu unrhyw opsiynau. Yr unig ateb sydd ar gael ar hyn o bryd yw estyniad Excel-DNA IntelliSense. Gallwch ddod o hyd i ragor o wybodaeth ar wefan y datblygwr.

    Gobeithio, bydd y canllawiau hyn yn eich helpu i ddatrys problemau pan na fydd eich swyddogaeth arferol yn gweithio neu pan nad yw'n gweithio.gweithio fel y dymunwch. Fodd bynnag, os yw eich UDF yn dal i fethu â gweithio, disgrifiwch eich mater yn gywir yn yr adran Sylwadau. Byddwn yn ceisio ei ddarganfod a dod o hyd i'r ateb i chi ;)

    Mae Michael Brown yn frwd dros dechnoleg ymroddedig ac yn frwd dros symleiddio prosesau cymhleth gan ddefnyddio offer meddalwedd. Gyda mwy na degawd o brofiad yn y diwydiant technoleg, mae wedi hogi ei sgiliau yn Microsoft Excel ac Outlook, yn ogystal â Google Sheets a Docs. Mae blog Michael yn ymroddedig i rannu ei wybodaeth a'i arbenigedd ag eraill, gan ddarparu awgrymiadau a thiwtorialau hawdd eu dilyn ar gyfer gwella cynhyrchiant ac effeithlonrwydd. P'un a ydych chi'n weithiwr proffesiynol profiadol neu'n ddechreuwr, mae blog Michael yn cynnig mewnwelediadau gwerthfawr a chyngor ymarferol ar gyfer cael y gorau o'r offer meddalwedd hanfodol hyn.