Excel UDF nuk funksionon: problemet dhe zgjidhjet

  • Shperndaje Kete
Michael Brown

Në këtë artikull, ne do t'i hedhim një vështrim çështjeve që mund të hasni kur përdorni funksione të personalizuara në librat tuaj të punës. Do të përpiqem t'ju tregoj se çfarë i shkakton ato dhe sa lehtë mund të zgjidhen.

Ja për çfarë do të flasim:

    Më parë folëm për atë që një funksioni i personalizuar është, si ta krijoni dhe përdorni atë. Nëse mendoni se keni nevojë të rifreskoni njohuritë bazë të UDF-ve paraprakisht, bëni një pauzë dhe shikoni artikullin tim të mëparshëm.

    Pse Excel UDF nuk rillogaritet?

    Kur bëni ndonjë ndryshim në Libri juaj i punës, Excel nuk do të rillogarisë çdo formulë që keni atje. Do të përditësojë rezultatet për ato formula që janë të lidhura vetëm me qelizat e ndryshuara.

    Por kjo ka të bëjë me funksionet standarde të Excel. Sa për ato me porosi, Excel nuk mund të vërtetojë kodin VBA dhe të identifikojë qeliza të tjera që mund të ndikojnë gjithashtu në rezultatin e funksionit të personalizuar. Prandaj, formula juaj e personalizuar mund të mos ndryshojë kur bëni ndryshime në librin e punës.

    Për të rregulluar problemin, do t'ju duhet vetëm të përdorni deklaratën Application.Volatile . Shikoni kapitullin tjetër për të mësuar udhëzimet hap pas hapi se si ta zbatoni atë.

    Funksionet e personalizuara të paqëndrueshme dhe jo të paqëndrueshme

    Si parazgjedhje, funksionet e personalizuara në Excel nuk janë të paqëndrueshme. Kjo do të thotë që UDF rillogaritet vetëm nëse ndryshon vlera e ndonjë prej qelizave që i referohet. Por nëse formati i qelizave, emri iFleta e punës, emri i skedarit ndryshon, atëherë nuk do të ketë ndryshime në UDF.

    Le të kalojmë nga fjalët në shembuj. Për shembull, duhet të shkruani emrin e librit tuaj të punës në një qelizë. Për ta bërë këtë, ju krijoni një funksion të personalizuar:

    Funksioni WorkbookName() As String WorkbookName = ThisWorkbook.Name Fund Function

    Tani imagjinoni rastin e mëposhtëm. Shkruat formulën e personalizuar =Emri i librit të punës() në qelizë dhe morët emrin e skedarit atje. Pas njëfarë kohe, vendosët ta riemërtoni skedarin dhe e ruajtët me një emër tjetër. Por ju shikoni vlerën në qelizë dhe shihni se ajo nuk ka ndryshuar. Ka ende një emër skedari të vjetër i cili nuk është më i saktë.

    Meqenëse nuk ka argumente në këtë funksion, funksioni nuk rillogaritet (edhe nëse ndryshoni emrin e librit të punës, e mbyllni dhe më pas rihapni atë).

    Shënim. Për të rillogaritur të gjitha funksionet në skedarin tuaj, mund të përdorni shkurtoren Ctrl + Alt + F9.

    A ka ndonjë mënyrë më të lehtë? Për të bërë rillogaritjen e formulës sa herë që ndryshon fleta e punës, ju nevojitet një rresht kodi shtesë. Ngjitni pjesën e mëposhtme të kodit në fillim të funksionit tuaj:

    Application.Volatile

    Pra, kodi juaj do të duket kështu:

    Funksioni WorkbookName() As String Application.Volatile WorkbookName = Funksioni Fundi ThisWorkbook.Name

    Tani UDF-ja juaj është e paqëndrueshme, prandaj do të rillogaritet automatikisht nëse ka ndonjë qelizë në fletën e punësështë rillogaritur ose ka ndodhur ndonjë ndryshim në fletoren e punës. Sapo të ndryshoni emrin e skedarit, do ta shihni menjëherë atë përditësim.

    Shënim. Ju lutemi mbani në mend se shumë funksione të paqëndrueshme mund të ngadalësojnë Excel-in tuaj. Në fund të fundit, ka shumë funksione të personalizuara që kryejnë llogaritje komplekse dhe funksionojnë vazhdimisht në vargje të mëdha të të dhënave.

    Prandaj, unë rekomandoj përdorimin e paqëndrueshmërisë vetëm aty ku është vërtet e nevojshme.

    Pse funksionet e personalizuara nuk janë të disponueshme

    Kur futni shkronjat e para të emrit të një funksioni të personalizuar, ai shfaqet në listën rënëse pranë qelizës hyrëse, ashtu si funksionet standarde të Excel.

    Megjithatë, kjo nuk ndodh gjithmonë. Cilat gabime mund të shkaktojnë këtë situatë?

    Nëse keni Excel 2003-2007, atëherë UDF nuk shfaqet kurrë në listën rënëse. Atje mund të shihni vetëm funksionet standarde.

    Por edhe nëse jeni duke përdorur një version më të ri të Excel, ka një gabim tjetër që mund të bëni aksidentalisht.

    Shikoni, funksioni i personalizuar duhet të jetë në një modul standard VBA i quajtur Module. Kur shtoni një modul të ri për të shkruar kodin e funksionit, krijohet automatikisht një dosje Module në të cilën shkruhen të gjitha modulet.

    Por ndonjëherë ndodh që një modul i ri nuk është duke u krijuar. Në pamjen tjetër të ekranit mund të shihni se kodi i funksionit të personalizuar është në modulin "Microsoft Excel Objects" së bashku meThis Workbook.

    Çështja është se nuk mund të vendosni një funksion të personalizuar në zonën e kodit të një flete pune ose libri pune. Në këtë rast, funksioni nuk do të funksionojë. Për më tepër, nuk do të shfaqet në listën rënëse të funksioneve. Prandaj, kodi duhet të jetë gjithmonë në dosjen Modulet .

    Teksti i ndihmës së funksionit të personalizuar të Excel nuk shfaqet

    Një problem tjetër mund të ndodhë është sugjerimi që shihni kur ngjitni një funksion me porosi. Nëse përdorni një funksion standard, gjithmonë do të shihni një këshillë veglash për funksionin dhe për argumentet e tij. Por çfarë ndodh me UDF-të?

    Nëse keni shumë funksione të personalizuara, do të jetë jashtëzakonisht e vështirë për ju të mbani mend se çfarë llogaritje bën secili prej tyre. Do të jetë edhe më e vështirë të mbani mend se cilat argumente të përdorni. Mendoj se do të ishte një ide e mirë që të keni një përshkrim të funksioneve tuaja të personalizuara si kujtesë.

    Për këtë, do të sugjeroja përdorimin e metodës Application.MacroOptions . Do t'ju ndihmojë të tregoni përshkrimin jo vetëm të funksionit, por edhe të secilit prej argumenteve të tij në dritaren Function Wizard. Ju e shihni këtë dritare kur klikoni butonin Fx në shiritin e formulave.

    Le të shohim se si të shtojmë një sugjerim të tillë në UDF-të tuaja. Në artikullin e mëparshëm ne shikuam funksionin e personalizuar GetMaxBetween. Ai gjen numrin maksimal në intervalin e specifikuar dhe merr tre argumente: një varg vlerash numerike dhe një vlerë maksimale dhe minimale përkërko për.

    Tani do të shtojmë një përshkrim për këtë funksion të personalizuar. Për ta bërë këtë, krijoni dhe ekzekutoni komandën Application.MacroOptions . Për funksionin GetMaxBetween , mund të ekzekutoni komandën e mëposhtme:

    Sub RegisterUDF () Dim strFuncName As String 'emri i funksionit që dëshironi të regjistroni Dim strDescr As String' përshkrimi i funksionit Vetë Dim strArgs () Si varg 'përshkrimi i argumenteve të funksionit' Regjistrohu GetMaxBetween funksioni ReDim strArgs (1 deri në 3) 'Numri i argumenteve në funksionin tuaj strFuncName = "GetMaxBetween" strDescr = "Numri maksimal në intervalin e specifikuar" strArgs (1) "Raga e vlerave numerike" strArgs (2) = "Kufiri i intervalit të poshtëm " strArgs (3) = " Kufiri i intervalit të sipërm " Application.MacroOptions Macro: = strFuncName, _ Përshkrimi: = strDescr, _ Përshkrimet e Argumentit: = strArgs, _ Kategoria: = " Funksionet e mia të personalizuara " Fund Sub

    ose

    Sub RegisterUDF () Application.MacroOptions Macro: = "GetMaxBetween" , _ Përshkrimi: = "Numri maksimal në diapazonin e specifikuar" , _ Kategoria: = "My Funksionet e personalizuara" , _ Përshkrimet e Argumentit: = Array (_ "Raga e vlerave numerike" , _ "Intervali më i ulët bor der" , _ "Kufiri i intervalit të sipërm" ) End Sub

    Variable str FuncName është emri i funksionit. strDescr - përshkrimi i funksionit. Variablat strArgs përmbajnë sugjerime për secilin argument.

    Ju mund të pyesni veten se cili është argumenti i katërt përAplikimi.MacroOptions. Ky argument opsional quhet Kategoria dhe tregon klasën e funksioneve të Excel ku do të vendoset funksioni ynë i personalizuar GetMaxBetween () . Mund ta emërtoni sipas cilësdo prej kategorive ekzistuese: Math & ; Trig, Statistical, Logical, etj. Ju mund të specifikoni një emër për kategorinë e re në të cilën do të vendosni funksionet që krijoni. Nëse nuk përdorni argumentin Kategoria, atëherë funksioni i personalizuar do të vendoset automatikisht në kategorinë "Përcaktuar nga përdoruesi".

    Ngjitni kodin e funksionit në dritaren e modulit:

    Më pas klikoni në butonin "Run". Komanda do të kryejë të gjitha cilësimet për përdorimin e butonit Fx me funksionin tuaj GetMaxBetween() .

    Nëse përpiqeni të futni një funksion në një qelizë duke përdorur Mjeti Insert Function , do të shihni se funksioni juaj GetMaxBetween është në kategorinë "Funksionet e mia të personalizuara":

    Ju thjesht mund të filloni të shkruani emrin e funksionit në qelizë dhe do të shihni funksionin tuaj të personalizuar në listën rënëse të funksioneve për të zgjedhur.

    Më pas telefononi Magjistari i Funksionit me butonin Fx.

    Këshillë. Ju gjithashtu mund të përdorni kombinimin e tasteve CRTL + A për të hapur magjistarin e funksionit.

    Në dritaren Function Wizard do të shihni një përshkrim të funksionit tuaj, si dhe një sugjerim për argumentin e parë. Nëse vendosni kursorin mbiargumenti i dytë ose i tretë, do të shihni gjithashtu sugjerime për to.

    Nëse dëshironi të ndryshoni tekstin e këtyre sugjerimeve, ndryshoni vlerat e strDescr dhe strArgs variabla në kodin RegisterUDF () . Pastaj ekzekutoni përsëri komandën RegisterUDF () .

    Nëse dëshironi të zhbëni të gjitha cilësimet e bëra dhe të pastroni përshkrimin e funksionit, ekzekutoni këtë kod:

    Sub UnregisterUDF () Application.MacroOptions Macro: = "GetMaxBetween" , _ Përshkrimi: = Empty , ArgumentDescriptions: = Empty , Category: = Empty End Sub

    Ka një mënyrë tjetër për të marrë një aluzion kur futni një funksion të personalizuar. Futni emrin e funksionit dhe më pas shtypni Ctrl + Shift + A :

    =GetMaxBetween( + Ctrl + Shift + A

    Do të shihni një listë të të gjitha argumenteve të funksionit:

    Fatkeqësisht, këtu nuk do të shihni përshkrimin e funksionit dhe argumentet e tij. Por nëse emrat e argumenteve janë mjaft informues, kështu që ato mund të jenë gjithashtu të dobishme. Megjithatë, është më mirë se asgjë :)

    Do të duhet pak më shumë punë për të krijuar intelisense për UDF-të që funksionojnë si funksionet standarde të Excel. Fatkeqësisht, Microsoft nuk ofron asnjë opsion. Zgjidhja e vetme në dispozicion është aktualisht një shtesë Excel-DNA IntelliSense. Mund të gjeni më shumë informacion në faqen e internetit të zhvilluesit.

    Shpresojmë, këto udhëzime do t'ju ndihmojnë të zgjidhni problemet kur funksioni juaj i personalizuar nuk funksionon ose nuk funksiononpunoni ashtu siç dëshironi. Nëse megjithatë, UDF juaj ende nuk funksionon, ju lutemi përshkruani problemin tuaj me saktësi në seksionin e komenteve. Ne do të përpiqemi ta kuptojmë dhe të gjejmë zgjidhjen për ju ;)

    Michael Brown është një entuziast i përkushtuar i teknologjisë me një pasion për thjeshtimin e proceseve komplekse duke përdorur mjete softuerike. Me më shumë se një dekadë përvojë në industrinë e teknologjisë, ai ka përmirësuar aftësitë e tij në Microsoft Excel dhe Outlook, si dhe Google Sheets dhe Docs. Blogu i Michael është i përkushtuar ndaj ndarjes së njohurive dhe ekspertizës së tij me të tjerët, duke ofruar këshilla dhe mësime të thjeshta për t'u ndjekur për të përmirësuar produktivitetin dhe efikasitetin. Pavarësisht nëse jeni një profesionist me përvojë apo fillestar, blogu i Michael ofron njohuri të vlefshme dhe këshilla praktike për të përfituar sa më shumë nga këto mjete softuerike thelbësore.