Excel UDF haifanyi kazi: shida na suluhisho

  • Shiriki Hii
Michael Brown

Katika makala haya, tutaangalia masuala ambayo unaweza kukabiliana nayo unapotumia vipengele maalum katika vitabu vyako vya kazi. Nitajaribu kukuonyesha kile kinachozisababisha na jinsi zinavyoweza kutatuliwa kwa urahisi.

Haya ndiyo tutakayozungumza:

    Hapo awali tulizungumza kuhusu nini a kazi maalum ni, jinsi ya kuunda na kuitumia. Iwapo unahisi unahitaji kuonyesha upya maarifa ya kimsingi ya UDFs mapema, pumzika na uangalie makala yangu ya awali.

    Kwa nini Excel UDF haihesabu upya?

    Unapofanya mabadiliko yoyote katika kitabu chako cha kazi, Excel haitahesabu tena kila fomula uliyo nayo hapo. Itasasisha matokeo ya fomula hizo ambazo zimeunganishwa kwa visanduku vilivyobadilishwa pekee.

    Lakini hii inahusu utendakazi wa kawaida wa Excel. Kuhusu zile maalum, Excel haiwezi kuhalalisha msimbo wa VBA na kutambua seli zingine ambazo zinaweza pia kuathiri matokeo ya utendakazi maalum. Kwa hivyo, fomula yako maalum inaweza isibadilike unapofanya mabadiliko kwenye kitabu cha kazi.

    Ili kutatua tatizo, utahitaji tu kutumia taarifa ya Application.Volatile . Angalia sura inayofuata ili ujifunze maagizo ya hatua kwa hatua ya jinsi ya kuitumia.

    Vitendaji Tete dhidi ya vitendaji visivyobadilika

    Kwa chaguo-msingi, vitendaji maalum katika Excel si tete. Hii inamaanisha kuwa UDF inakokotolewa upya ikiwa tu thamani ya seli zozote inarejelea mabadiliko. Lakini kama umbizo la seli, jina lalaha ya kazi, jina la mabadiliko ya faili, basi hakuna mabadiliko yatatokea katika UDF.

    Hebu tubadilishe kutoka kwa maneno hadi kwa mifano. Kwa mfano, unahitaji kuandika jina la kitabu chako cha kazi kwenye seli. Ili kufanya hivyo, unaunda chaguo maalum la kukokotoa:

    Function WorkbookName() As String WorkbookName = ThisWorkbook.Jina Kazi ya Kumaliza

    Sasa fikiria kesi ifuatayo. Uliandika formula maalum =WorkbookName() kwenye seli na ukapata jina la faili hapo. Baada ya muda, uliamua kubadili jina la faili na kuihifadhi kwa jina tofauti. Lakini unatazama thamani katika seli na kuona kwamba haijabadilika. Bado kuna jina la faili la zamani ambalo si sahihi tena.

    Kwa kuwa hakuna hoja katika chaguo la kukokotoa, utendakazi hauhesabiwi upya (hata ukibadilisha jina la kitabu cha kazi, kifunge, kisha ufungue tena. it).

    Kumbuka. Ili kuhesabu tena vitendaji vyote kwenye faili yako, unaweza kutumia njia ya mkato ya Ctrl + Alt + F9.

    Je, kuna njia rahisi zaidi? Ili kufanya formula kuhesabu upya kila wakati laha ya kazi inabadilika, unahitaji safu ya ziada ya nambari. Bandika kipande cha msimbo kifuatacho mwanzoni mwa chaguo lako la kukokotoa:

    Application.Volatile

    Kwa hivyo, msimbo wako utaonekana hivi:

    Function Kitabu cha KaziJina() Kama Utumizi wa Mfuatano.Kitabu TeteJina = Kitabu hiki cha Kazi.Jina Kazi ya Kumaliza

    Sasa UDF yako ni tete, kwa hivyo itahesabiwa upya kiotomatiki ikiwa kisanduku chochote kwenye lahakaziimehesabiwa upya au mabadiliko yoyote yametokea kwenye kitabu cha kazi. Mara tu unapobadilisha jina la faili, utaona sasisho hilo mara moja.

    Kumbuka. Tafadhali kumbuka kuwa vitendaji vingi sana vinaweza kupunguza kasi ya Excel yako. Baada ya yote, kuna vitendaji vingi vya desturi ambavyo hufanya hesabu ngumu na kufanya kazi kwenye safu kubwa za data kila wakati.

    Kwa hivyo, ninapendekeza kutumia tete pale tu inapohitajika.

    Kwa nini utendakazi maalum haupatikani

    Unapoingiza herufi za kwanza za jina la chaguo maalum la kukokotoa, inaonekana. katika orodha kunjuzi karibu na kisanduku cha kuingiza data, kama vile vitendakazi vya kawaida vya Excel.

    Hata hivyo, hii haifanyiki kila mara. Ni makosa gani yanaweza kusababisha hali hii?

    Ikiwa una Excel 2003-2007, basi UDF haionekani kamwe kwenye orodha kunjuzi. Hapo unaweza kuona vitendaji vya kawaida pekee.

    Lakini hata kama unatumia toleo jipya zaidi la Excel, kuna kosa jingine unaweza kufanya kimakosa.

    Unaona, kitendakazi maalum lazima kiwe ndani. moduli ya kawaida ya VBA inayoitwa Moduli. Unapoongeza moduli mpya ili kuandika msimbo wa kukokotoa, folda ya Moduli huundwa kiotomatiki ambamo moduli zote zimeandikwa.

    Lakini wakati mwingine hutokea kwamba moduli mpya sivyo. kuundwa. Kwenye picha ya skrini inayofuata unaweza kuona kwamba msimbo maalum wa utendakazi uko kwenye moduli ya "Vitu vya Microsoft Excel" pamoja naKitabu hiki cha Kazi.

    Lakini ni kwamba huwezi kuweka kitendakazi maalum katika eneo la msimbo wa lahakazi au kitabu cha kazi. Katika kesi hii, kazi haitafanya kazi. Zaidi ya hayo, haitaonekana kwenye orodha kunjuzi ya vitendaji. Kwa hivyo, msimbo unapaswa kuwa kwenye folda kila wakati Moduli .

    Maandishi ya usaidizi ya utendakazi maalum wa Excel hayaonyeshwi

    Tatizo jingine linaweza kutokea ni kidokezo unachokiona unapobandika. kipengele maalum. Ikiwa unatumia chaguo la kukokotoa la kawaida, utaona daima kidokezo cha chaguo za kukokotoa na kwa hoja zake. Lakini vipi kuhusu UDF?

    Ikiwa una vitendaji vingi maalum, itakuwa vigumu sana kwako kukumbuka ni hesabu gani kila moja yao hufanya. Itakuwa ngumu zaidi kukumbuka ni hoja gani za kutumia. Nadhani litakuwa wazo zuri kuwa na maelezo ya utendakazi wako maalum kama kikumbusho.

    Kwa hili, ningependekeza utumie mbinu ya Application.MacroOptions . Itakusaidia kuonyesha maelezo ya sio tu kazi lakini pia ya kila hoja zake kwenye dirisha la Mchawi wa Kazi. Utaona dirisha hili unapobofya kitufe cha Fx katika upau wa fomula.

    Hebu tuone jinsi ya kuongeza kidokezo kama hicho kwenye UDF zako. Katika makala iliyotangulia tuliangalia kazi ya kawaida ya GetMaxBetween. Hupata nambari ya juu zaidi katika safu maalum na kuchukua hoja tatu: anuwai ya nambari, na kiwango cha juu na cha chini chatafuta.

    Sasa tutaongeza maelezo kwa utendakazi huu maalum. Ili kufanya hivyo, unda na uendeshe Application.MacroOptions amri. Kwa GetMaxBetween kitendakazi, unaweza kutekeleza amri ifuatayo:

    Jisajili NdogoUDF () Dim strFuncName Kama String 'jina la chaguo la kukokotoa unalotaka kusajili Dim strDescr As String ' maelezo ya chaguo la kukokotoa. yenyewe Dim strArgs () Kama Kamba 'maelezo ya hoja za kazi ' Sajili GetMaxKati ya chaguo za kukokotoa ReDim strArgs (1 Hadi 3) 'Idadi ya hoja katika chaguo lako la kukokotoa strFuncName = "GetMaxBetween" strDescr = "Nambari ya juu zaidi katika safu maalum" strArgs (1) = "Msururu wa thamani za nambari" strArgs (2) = "Mpaka wa muda wa chini " strArgs (3) = " Mpaka wa muda wa juu " Application.MacroOptions Macro: = strFuncName, _ Maelezo: = strDescr, _ ArgumentDescriptions: = strArgs, _ Category: = " Kazi Zangu Maalum " Maliza Ndogo

    au

    Daftari NdogoUDF () Application.MacroOptions Macro: = "GetMaxBetween" , _ Description: = "Nambari ya juu zaidi katika safu maalum" , _ Category: = "My Kazi Maalum" , _ ArgumentDescriptions: = Mkusanyiko (_ "Msururu wa thamani za nambari" , _ "Kipindi cha chini cha muda der" , _ "Mpaka wa muda wa juu" ) Mwisho Ndogo

    Kigeuzi str FuncName ni jina la chaguo la kukokotoa. strDescr - maelezo ya kazi. Vigezo vya strArgs vina vidokezo kwa kila hoja.

    Unaweza kujiuliza ni hoja gani ya nneApplication.MacroOptions. Hoja hii ya hiari imepewa jina Kitengo na inaonyesha aina ya vitendaji vya Excel ambayo kitendaji chetu maalum cha GetMaxBetween () kitawekwa. Unaweza kukipa jina baada ya aina zozote zilizopo: Hisabati &amp. ; Trig, Takwimu, Mantiki, n.k. Unaweza kubainisha jina la aina mpya ambayo utaweka vipengele unavyounda. Ikiwa hutumii hoja ya Kitengo, basi kipengele cha kukokotoa maalum kitawekwa kiotomatiki katika kategoria ya "Amefafanuliwa Mtumiaji".

    Bandika msimbo wa kukokotoa kwenye dirisha la sehemu:

    Kisha bofya kitufe cha “Run”. Amri itafanya mipangilio yote ya kutumia kitufe cha Fx chenye kitendakazi chako cha GetMaxBetween() .

    Ukijaribu kuingiza kitendakazi kwenye kisanduku kwa kutumia GetMaxBetween() . zana unaweza tu kuanza kuandika jina la chaguo la kukokotoa kwenye kisanduku na utaona utendakazi wako maalum katika orodha kunjuzi ya vitendakazi ili kuchagua kutoka.

    Kisha piga Mchawi wa Kazi kwa kitufe cha Fx.

    Kidokezo. Unaweza pia kutumia mchanganyiko muhimu CRTL + A kufungua Mchawi wa Kazi.

    Katika Mchawi wa Kazi utaona maelezo ya chaguo lako la kukokotoa, pamoja na kidokezo cha hoja ya kwanza. Ikiwa utaweka mshale juu yahoja ya pili au ya tatu, utaona pia vidokezo kwao.

    Ikiwa ungependa kubadilisha maandishi ya vidokezo hivi, badilisha thamani za strDescr na strArgs vigezo katika msimbo wa RegisterUDF () . Kisha endesha amri ya RegisterUDF () tena.

    Ikiwa ungependa kutendua mipangilio yote iliyowekwa na kufuta maelezo ya chaguo la kukokotoa, endesha msimbo huu:

    Sub UnregisterUDF () Application.MacroOptions Macro: = "GetMaxBetween" , _ Description: = Tupu , ArgumentDescriptions: = Tupu , Category: = Empty End Sub

    Kuna njia moja zaidi ya kupata kidokezo unapoingiza utendaji maalum. Ingiza jina la chaguo la kukokotoa kisha ubonyeze Ctrl + Shift + A :

    =GetMaxBetween( + Ctrl + Shift + A

    Utaona orodha ya hoja zote za chaguo la kukokotoa:

    0>

    Kwa bahati mbaya, hapa hutaona maelezo ya kazi na hoja zake. Lakini ikiwa majina ya hoja ni ya kuelimisha sana, kwa hivyo yanaweza kusaidia pia. Bado, ni bora kuliko chochote :)

    Itachukua kazi kidogo zaidi kuunda akili kwa UDF zinazofanya kazi kama vitendaji vya kawaida vya Excel. Kwa bahati mbaya, Microsoft haitoi chaguzi zozote. Suluhisho pekee linalopatikana kwa sasa ni kiendelezi cha Excel-DNA IntelliSense. Unaweza kupata maelezo zaidi kwenye tovuti ya msanidi.

    Tunatumai, miongozo hii itakusaidia kutatua matatizo wakati utendakazi wako maalum haufanyi kazi au haufanyi kazi.fanya kazi upendavyo. Iwapo, UDF yako bado itashindwa kufanya kazi, tafadhali eleza suala lako kwa usahihi katika sehemu ya Maoni. Tutajaribu kusuluhisha na kukutafutia suluhu ;)

    Michael Brown ni mpenda teknolojia aliyejitolea na mwenye shauku ya kurahisisha michakato changamano kwa kutumia zana za programu. Akiwa na uzoefu wa zaidi ya muongo mmoja katika tasnia ya teknolojia, ameboresha ujuzi wake katika Microsoft Excel na Outlook, pamoja na Majedwali ya Google na Hati. Blogu ya Michael imejitolea kushiriki maarifa na ujuzi wake na wengine, kutoa vidokezo na mafunzo ambayo ni rahisi kufuata ili kuboresha tija na ufanisi. Iwe wewe ni mtaalamu aliyebobea au umeanza, blogu ya Michael inatoa maarifa muhimu na ushauri wa vitendo ili kupata manufaa zaidi kutoka kwa zana hizi muhimu za programu.