Excel UDF ක්‍රියා නොකරයි: ගැටළු සහ විසඳුම්

  • මේක Share කරන්න
Michael Brown

මෙම ලිපියෙන්, අපි ඔබේ වැඩපොත්වල අභිරුචි කාර්යයන් භාවිතා කරන විට ඔබට මුහුණ දීමට සිදු විය හැකි ගැටළු දෙස බලමු. ඒවාට හේතුව කුමක්ද සහ ඒවා කෙතරම් පහසුවෙන් විසඳිය හැකිද යන්න මම ඔබට පෙන්වීමට උත්සාහ කරමි.

මෙන්න අපි කතා කරන්නේ:

    කලින් අපි කතා කළේ කුමක්ද අභිරුචි ශ්‍රිතය යනු, එය නිර්මාණය කර භාවිතා කරන ආකාරයයි. ඔබට UDF පිළිබඳ මූලික දැනුම කලින් අලුත් කර ගැනීමට අවශ්‍ය යැයි හැඟේ නම්, විරාමයක් ගෙන මගේ පෙර ලිපිය දෙස බලන්න.

    Excel UDF නැවත ගණනය නොකරන්නේ ඇයි?

    ඔබ යම් වෙනසක් සිදු කරන විට ඔබගේ වැඩපොත, Excel ඔබ සතුව ඇති සෑම සූත්‍රයක්ම නැවත ගණනය නොකරයි. එය වෙනස් කළ සෛලවලට පමණක් සම්බන්ධ කර ඇති එම සූත්‍ර සඳහා ප්‍රතිඵල යාවත්කාලීන කරනු ඇත.

    නමුත් මෙය සම්මත Excel ශ්‍රිතවලට අදාළ වේ. අභිරුචි ඒවා සම්බන්ධයෙන් ගත් කල, Excel හට VBA කේතය වලංගු කිරීමට සහ අභිරුචි ශ්‍රිතයේ ප්‍රතිඵලයට බලපෑ හැකි අනෙකුත් සෛල හඳුනා ගැනීමට නොහැක. එබැවින්, ඔබ වැඩපොතට වෙනස්කම් කරන විට ඔබේ අභිරුචි සූත්‍රය වෙනස් නොවිය හැක.

    ගැටලුව විසඳීමට, ඔබට Application.Volatile ප්‍රකාශය භාවිතා කිරීමට අවශ්‍ය වේ. එය යෙදිය යුතු ආකාරය පිළිබඳ පියවරෙන් පියවර උපදෙස් ඉගෙන ගැනීමට ඊළඟ පරිච්ඡේදය පරීක්ෂා කරන්න.

    වාෂ්පශීලී එදිරිව වාෂ්පශීලී නොවන අභිරුචි ශ්‍රිත

    පෙරනිමියෙන්, Excel හි අභිරුචි ශ්‍රිත වාෂ්පශීලී නොවේ. මෙයින් අදහස් කරන්නේ UDF නැවත ගණනය කරනු ලබන්නේ එය සඳහන් කරන ඕනෑම සෛලයක අගය වෙනස් වුවහොත් පමණක් බවයි. නමුත් සෛලවල ආකෘතිය නම්, නමවැඩ පත්‍රිකාව, ගොනුවේ නම වෙනස් වේ, එවිට UDF හි කිසිදු වෙනසක් සිදු නොවනු ඇත.

    අපි වචන වලින් උදාහරණ වලට මාරු වෙමු. උදාහරණයක් ලෙස, ඔබ ඔබේ වැඩපොතේ නම කොටුවක ලියා තැබිය යුතුය. මෙය සිදු කිරීම සඳහා, ඔබ අභිරුචි ශ්‍රිතයක් සාදන්න:

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

    දැන් පහත අවස්ථාව සිතන්න. ඔබ අභිරුචි සූත්‍රය =WorkbookName() කොටුව තුළට ලියා එහි ගොනු නාමය ලබා ගත්තේය. ටික වේලාවකින්, ඔබ ගොනුව නැවත නම් කිරීමට තීරණය කර එය වෙනත් නමකින් සුරකින ලදී. නමුත් ඔබ සෛලයේ අගය දෙස බලන විට එය වෙනස් වී නැති බව පෙනේ. තව දුරටත් නිවැරදි නොවන පැරණි ගොනු නාමයක් තවමත් ඇත.

    මෙම ශ්‍රිතයේ තර්ක නොමැති බැවින්, ශ්‍රිතය නැවත ගණනය නොකෙරේ (ඔබ වැඩපොතේ නම වෙනස් කළත්, එය වසා, පසුව නැවත විවෘත කරන්න එය).

    සටහන. ඔබගේ ගොනුවේ ඇති සියලුම කාර්යයන් නැවත ගණනය කිරීම සඳහා, ඔබට Ctrl + Alt + F9 කෙටිමඟ භාවිතා කළ හැක.

    පහසු මගක් තිබේද? වැඩ පත්‍රිකාව වෙනස් වන සෑම අවස්ථාවකම සූත්‍රය නැවත ගණනය කිරීමට, ඔබට අමතර කේතයක් අවශ්‍ය වේ. ඔබගේ කාර්යයේ ආරම්භයේදී පහත කේත කොටස අලවන්න:

    යෙදුම. වාෂ්පශීලී

    එබැවින්, ඔබේ කේතය මෙලෙස දිස්වේ:

    Function WorkbookName() String Application ලෙස.Volatile WorkbookName = ThisWorkbook.Name End Function

    දැන් ඔබේ UDF වාෂ්පශීලීයි, එබැවින් වැඩ පත්‍රිකාවේ කිසියම් කොටුවක් ඇත්නම් එය ස්වයංක්‍රීයව නැවත ගණනය කෙරේ.නැවත ගණනය කර හෝ වැඩපොතෙහි කිසියම් වෙනසක් සිදුවී ඇත. ඔබ ගොනුවේ නම වෙනස් කළ විගස, එම යාවත්කාලීනය වහාම ඔබට පෙනෙනු ඇත.

    සටහන. බොහෝ වාෂ්පශීලී ක්‍රියාකාරකම් ඔබේ Excel මන්දගාමී කළ හැකි බව කරුණාකර මතක තබා ගන්න. සියල්ලට පසු, සංකීර්ණ ගණනය කිරීම් සිදු කරන සහ විශාල දත්ත පරාසයක අඛණ්ඩව ක්‍රියා කරන අභිරුචි ශ්‍රිත බොහොමයක් තිබේ.

    එබැවින්, අස්ථාවරත්වය සැබවින්ම අවශ්‍ය තැන පමණක් භාවිතා කිරීමට මම නිර්දේශ කරමි.

    අභිරුචි ශ්‍රිත නොපවතින්නේ ඇයි

    ඔබ අභිරුචි ශ්‍රිතයක නමේ මුල් අකුරු ඇතුළත් කළ විට, එය දිස්වේ. ආදාන කොටුව අසල ඇති පතන ලැයිස්තුවේ, සම්මත Excel ශ්‍රිතයන් මෙන්.

    කෙසේ වෙතත්, මෙය සැමවිටම සිදු නොවේ. මෙම තත්වයට හේතු විය හැකි වැරදි මොනවාද?

    ඔබට Excel 2003-2007 තිබේ නම්, UDF කිසිවිටක පතන ලැයිස්තුවේ නොපෙන්වයි. එහිදී ඔබට දැකිය හැක්කේ සම්මත ශ්‍රිතයන් පමණි.

    නමුත් ඔබ Excel හි නවතම අනුවාදයක් භාවිතා කරන්නේ නම්, ඔබට අහම්බෙන් සිදු විය හැකි තවත් වැරැද්දක් තිබේ.

    ඔබට පෙනෙනවා, අභිරුචි ශ්‍රිතය තිබිය යුතුය. මොඩියුල ලෙස හඳුන්වන සම්මත VBA මොඩියුලය. ඔබ ක්‍රියාකාරී කේතය ලිවීමට නව මොඩියුලයක් එක් කළ විට, සියලුම මොඩියුල ලියා ඇති මොඩියුල ෆෝල්ඩරයක් ස්වයංක්‍රීයව නිර්මාණය වේ.

    නමුත් සමහර විට එය නව මොඩියුලයක් නොවේ. නිර්මාණය වෙමින් මීළඟ තිර රුවක් මත අභිරුචි ක්‍රියාකාරී කේතය "Microsoft Excel Objects" මොඩියුලයේ ඇති බව ඔබට දැක ගත හැක.මෙම වැඩපොත.

    කාරණය වන්නේ ඔබට වැඩ පත්‍රිකාවක හෝ වැඩපොතෙහි කේත ප්‍රදේශය තුළ අභිරුචි ශ්‍රිතයක් තැබිය නොහැකි වීමයි. මෙම අවස්ථාවේදී, කාර්යය ක්රියා නොකරනු ඇත. එපමණක් නොව, එය ශ්‍රිතවල පතන ලැයිස්තුවේ නොපෙන්වයි. එමනිසා, කේතය සෑම විටම මොඩියුල ෆෝල්ඩරය තුළ තිබිය යුතුය.

    Excel අභිරුචි ශ්‍රිත උදවු පෙළ දර්ශනය නොවේ

    තවත් ගැටළුවක් ඇති විය හැක්කේ ඔබ අලවන විට ඔබ දකින ඉඟියයි. අභිරුචි කාර්යයක්. ඔබ සම්මත ශ්‍රිතයක් භාවිතා කරන්නේ නම්, ඔබට සැමවිටම ශ්‍රිතය සහ එහි තර්ක සඳහා මෙවලම් ඉඟියක් පෙනෙනු ඇත. නමුත් UDF ගැන කුමක් කිව හැකිද?

    ඔබට බොහෝ අභිරුචි ශ්‍රිත තිබේ නම්, ඒ එක් එක් ගණනය කිරීම් මොනවාදැයි මතක තබා ගැනීම ඔබට අතිශයින් දුෂ්කර වනු ඇත. කුමන තර්ක භාවිතා කළ යුතුද යන්න මතක තබා ගැනීම වඩාත් අපහසු වනු ඇත. මතක් කිරීමක් ලෙස ඔබගේ අභිරුචි කාර්යයන් පිළිබඳ විස්තරයක් තිබීම හොඳ අදහසක් යැයි මම සිතමි.

    මේ සඳහා, මම Application.MacroOptions ක්‍රමය භාවිතා කිරීමට යෝජනා කරමි. එය ඔබට Function Wizard කවුළුව තුළ ශ්‍රිතය පමණක් නොව එහි එක් එක් තර්ක පිළිබඳ විස්තරය පෙන්වීමට උපකාරී වේ. ඔබ සූත්‍ර තීරුවේ ඇති Fx බොත්තම ක්ලික් කළ විට ඔබට මෙම කවුළුව පෙනෙනු ඇත.

    ඔබේ UDF වලට එවැනි ඉඟියක් එක් කරන්නේ කෙසේදැයි බලමු. කලින් ලිපියෙන් අපි බැලුවා GetMaxBetween custom function එක. එය නිශ්චිත පරාසයේ උපරිම සංඛ්‍යාව සොයා ගන්නා අතර තර්ක තුනක් ගනී: සංඛ්‍යාත්මක අගයන් පරාසයක්, සහ උපරිම සහ අවම අගයසඳහා සොයන්න.

    දැන් අපි මෙම අභිරුචි කාර්යය සඳහා විස්තරයක් එක් කරන්නෙමු. මෙය සිදු කිරීම සඳහා, Application.MacroOptions විධානය සාදා ක්‍රියාත්මක කරන්න. GetMaxBetween ශ්‍රිතය සඳහා, ඔබට පහත විධානය ක්‍රියාත්මක කළ හැක:

    Sub RegisterUDF () Dim strFuncName ඔබට ලියාපදිංචි කිරීමට අවශ්‍ය ශ්‍රිතයේ String නම ලෙස Dim strDescr As String ' ශ්‍රිතයේ විස්තරය එයම Dim strArgs () String 'ශ්‍රිත තර්කවල විස්තරය' ලෙස 'GetMaxBetween ශ්‍රිතය ReDim strArgs (1 සිට 3 දක්වා) ලියාපදිංචි කරන්න 'ඔබේ ශ්‍රිතයේ ඇති තර්ක ගණන strFuncName = "GetMaxBetween" strDescr = "විශේෂිත පරාසයේ උපරිම සංඛ්‍යාව" = "සංඛ්‍යාත්මක අගයන් පරාසය" strArgs (2) = "පහළ අන්තර මායිම " strArgs (3) = " ඉහළ අන්තර මායිම " Application.MacroOptions Macro: = strFuncName, _ විස්තරය: = strDescr, _ ArgumentDescriptions: = strArg: = strArg " My Custom Functions " End Sub

    හෝ

    Sub RegisterUDF () Application.MacroOptions Macro: = "GetMaxBetween" , _ Description: = "නිශ්චිත පරාසයේ ඇති උපරිම අංකය" , _ Category: = "My අභිරුචි ක්‍රියා" , _ තර්ක විස්තර: = අරාව (_ "සංඛ්‍යාත්මක අගයන් පරාසය" , _ "පහළ අන්තර bor der" , _ "ඉහළ අන්තර මායිම" ) End Sub

    Variable str FuncName යනු ශ්‍රිතයේ නමයි. strDescr - කාර්යය විස්තරය. strArgs විචල්‍යවල එක් එක් තර්කය සඳහා ඉඟි අඩංගු වේ.

    ඔබට සිවුවැනි තර්කය කුමක් දැයි සිතෙනු ඇත.Application.Macro Options. මෙම විකල්ප තර්කය ප්‍රවර්ගය ලෙස නම් කර ඇති අතර අපගේ අභිරුචි GetMaxBetween () ශ්‍රිතය ස්ථානගත කරනු ලබන Excel ශ්‍රිත පන්තිය පෙන්නුම් කරයි. පවතින ඕනෑම ප්‍රවර්ගයකට පසුව ඔබට එය නම් කළ හැක: Math & ; ට්‍රිග්, සංඛ්‍යානමය, තාර්කික යනාදිය. ඔබ විසින් සාදන ලද කාර්යයන් ඔබ විසින් තබන නව ප්‍රවර්ගය සඳහා නමක් නියම කළ හැක. ඔබ ප්‍රවර්ග තර්කය භාවිතා නොකරන්නේ නම්, අභිරුචි ශ්‍රිතය ස්වයංක්‍රීයව "පරිශීලක නිර්වචනය" ප්‍රවර්ගය තුළ ස්ථානගත වනු ඇත.

    ක්‍රියාකාරී කේතය මොඩියුල කවුළුවට අලවන්න:

    1>

    ඉන්පසු "ධාවනය" බොත්තම ක්ලික් කරන්න. ඔබගේ GetMaxBetween() ශ්‍රිතය සමඟින් Fx බොත්තම භාවිතා කිරීම සඳහා විධානය සියලු සැකසුම් සිදු කරනු ඇත.

    ඔබ <භාවිතා කර සෛලයකට ශ්‍රිතයක් ඇතුළු කිරීමට උත්සාහ කරන්නේ නම් 6>Insert Function මෙවලම, ඔබේ GetMaxBetween ශ්‍රිතය "My Custom Functions" ප්‍රවර්ගය තුළ ඇති බව ඔබට පෙනෙනු ඇත:

    ඔබ හුදෙක් සෛලය තුළට ශ්‍රිතයේ නම ටයිප් කිරීම ආරම්භ කළ හැකි අතර තෝරා ගැනීමට ඇති ශ්‍රිතවල පතන ලැයිස්තුවේ ඔබගේ අභිරුචි ශ්‍රිතය ඔබට පෙනෙනු ඇත.

    ඉන්පසු Function Wizard අමතන්න. Fx බොත්තම සමඟ.

    ඉඟිය. Function Wizard විවෘත කිරීමට ඔබට CRTL + A යතුරු සංයෝජනය භාවිතා කළ හැක.

    Function Wizard කවුළුව තුළ ඔබට ඔබේ කාර්යය පිළිබඳ විස්තරයක් මෙන්ම පළමු තර්කය සඳහා ඉඟියක් ද පෙනෙනු ඇත. ඔබ ඔබේ කර්සරය මත තැබුවහොත්දෙවන හෝ තෙවන තර්කය, ඔබට ඒවා සඳහා ඉඟි ද පෙනෙනු ඇත.

    ඔබට මෙම ඉඟි වල පෙළ වෙනස් කිරීමට අවශ්‍ය නම්, strDescr සහ strArgs<අගයන් වෙනස් කරන්න. 7> RegisterUDF () කේතයේ විචල්‍යයන්. ඉන්පසු RegisterUDF () විධානය නැවත ක්‍රියාත්මක කරන්න.

    ඔබට සාදන ලද සියලුම සැකසුම් ඉවත් කර ක්‍රියාකාරී විස්තරය හිස් කිරීමට අවශ්‍ය නම්, මෙම කේතය ක්‍රියාත්මක කරන්න:

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

    ඔබ අභිරුචි ශ්‍රිතයක් ඇතුළු කරන විට ඉඟියක් ලබා ගැනීමට තවත් එක් ක්‍රමයක් තිබේ. ශ්‍රිතයේ නම ඇතුළත් කර Ctrl + Shift + A ඔබන්න :

    =GetMaxBetween( + Ctrl + Shift + A

    ඔබට සියලුම ශ්‍රිතයේ තර්ක ලැයිස්තුවක් පෙනෙනු ඇත:

    අවාසනාවකට, මෙහිදී ඔබට ශ්‍රිතයේ විස්තරය සහ එහි තර්ක නොපෙනේ. නමුත් තර්කවල නම් ඉතා තොරතුරු සහිත නම්, ඒවා ද ප්රයෝජනවත් විය හැකිය. තවමත්, එය කිසිවකට වඩා හොඳයි :)

    සම්මත Excel ශ්‍රිතයන් මෙන් ක්‍රියා කරන UDF සඳහා බුද්ධිය නිර්මාණය කිරීමට තව ටිකක් වැඩ අවශ්‍ය වේ. අවාසනාවකට, මයික්‍රොසොෆ්ට් කිසිදු විකල්පයක් ලබා නොදේ. දැනට පවතින එකම විසඳුම Excel-DNA IntelliSense දිගුවකි. ඔබට සංවර්ධකයාගේ වෙබ් අඩවියෙන් වැඩිදුර තොරතුරු සොයා ගත හැක.

    ඔබේ අභිරුචි කාර්යය ක්‍රියා නොකරන විට හෝ නොකෙරෙන විට ගැටළු විසඳීමට මෙම මාර්ගෝපදේශ ඔබට උදවු වනු ඇතැයි බලාපොරොත්තු වේ.ඔබ කැමති පරිදි වැඩ කරන්න. කෙසේ වෙතත්, ඔබේ UDF තවමත් ක්‍රියා කිරීමට අපොහොසත් වන්නේ නම්, කරුණාකර අදහස් කොටසේ ඔබේ ගැටලුව නිවැරදිව විස්තර කරන්න. අපි එය සොයා ගැනීමට සහ ඔබ සඳහා විසඳුම සොයා ගැනීමට උත්සාහ කරන්නෙමු ;)

    මයිකල් බ්‍රවුන් යනු මෘදුකාංග මෙවලම් භාවිතයෙන් සංකීර්ණ ක්‍රියාවලීන් සරල කිරීමට දැඩි ආශාවක් ඇති කැපවූ තාක්‍ෂණ ලෝලියෙකි. තාක්‍ෂණ ක්‍ෂේත්‍රයේ දශකයකට වැඩි පළපුරුද්දක් ඇති ඔහු Microsoft Excel සහ Outlook මෙන්ම Google Sheets සහ Docs හි ඔහුගේ කුසලතා ඔප් නංවා ඇත. මයිකල්ගේ බ්ලොගය ඔහුගේ දැනුම සහ ප්‍රවීණත්වය අන් අය සමඟ බෙදා ගැනීමට කැපවී ඇත, ඵලදායිතාව සහ කාර්යක්ෂමතාව වැඩි දියුණු කිරීම සඳහා පහසුවෙන් අනුගමනය කළ හැකි ඉඟි සහ නිබන්ධන සපයයි. ඔබ පළපුරුදු වෘත්තිකයෙකු හෝ ආධුනිකයෙකු වුවද, මයිකල්ගේ බ්ලොගය මෙම අත්‍යවශ්‍ය මෘදුකාංග මෙවලම්වලින් උපරිම ප්‍රයෝජන ලබා ගැනීම සඳහා වටිනා අවබෝධයක් සහ ප්‍රායෝගික උපදෙස් ලබා දෙයි.