Excel UDF வேலை செய்யவில்லை: சிக்கல்கள் மற்றும் தீர்வுகள்

  • இதை பகிர்
Michael Brown

இந்தக் கட்டுரையில், உங்கள் பணிப்புத்தகங்களில் தனிப்பயன் செயல்பாடுகளைப் பயன்படுத்தும் போது நீங்கள் எதிர்கொள்ளும் சிக்கல்களைப் பார்ப்போம். அவை எதனால் ஏற்படுகின்றன, அவற்றை எவ்வளவு எளிதாகத் தீர்க்கலாம் என்பதைக் காட்ட முயற்சிக்கிறேன்.

இங்கே நாம் பேசுவோம்:

    முன்பு நாங்கள் எதைப் பற்றி பேசினோம் தனிப்பயன் செயல்பாடு, அதை எவ்வாறு உருவாக்குவது மற்றும் பயன்படுத்துவது. UDFகளின் அடிப்படை அறிவை நீங்கள் முன்பே புதுப்பிக்க வேண்டும் என நீங்கள் நினைத்தால், சிறிது நேரம் நிதானித்து எனது முந்தைய கட்டுரையைப் பார்க்கவும்.

    எக்செல் UDF ஏன் மீண்டும் கணக்கிடப்படவில்லை?

    நீங்கள் மாற்றங்களைச் செய்யும்போது உங்கள் பணிப்புத்தகம், எக்செல் உங்களிடம் உள்ள ஒவ்வொரு சூத்திரத்தையும் மீண்டும் கணக்கிடாது. மாற்றப்பட்ட கலங்களுடன் இணைக்கப்பட்ட சூத்திரங்களுக்கான முடிவுகளை இது புதுப்பிக்கும்.

    ஆனால் இது நிலையான எக்செல் செயல்பாடுகளைப் பற்றியது. தனிப்பயன் ஒன்றைப் பொறுத்தவரை, எக்செல் VBA குறியீட்டை சரிபார்க்க முடியாது மற்றும் தனிப்பயன் செயல்பாட்டின் முடிவை பாதிக்கக்கூடிய பிற செல்களை அடையாளம் காண முடியாது. எனவே, நீங்கள் பணிப்புத்தகத்தில் மாற்றங்களைச் செய்யும்போது உங்கள் தனிப்பயன் சூத்திரம் மாறாமல் போகலாம்.

    சிக்கலைச் சரிசெய்ய, நீங்கள் Application.Volatile அறிக்கையைப் பயன்படுத்த வேண்டும். அதை எவ்வாறு பயன்படுத்துவது என்பது குறித்த படிப்படியான வழிமுறைகளை அறிய அடுத்த அத்தியாயத்தைப் பார்க்கவும்.

    கொந்தளிப்பான மற்றும் நிலையற்ற தனிப்பயன் செயல்பாடுகள்

    இயல்புநிலையாக, Excel இல் உள்ள தனிப்பயன் செயல்பாடுகள் நிலையற்றவை அல்ல. அதாவது UDF குறிப்பிடும் கலங்களின் மதிப்பு மாறினால் மட்டுமே மீண்டும் கணக்கிடப்படும். ஆனால் செல்களின் வடிவம் என்றால், பெயர்பணித்தாள், கோப்பின் பெயர் மாற்றம், பின்னர் UDF இல் எந்த மாற்றமும் ஏற்படாது.

    வார்த்தைகளிலிருந்து எடுத்துக்காட்டுகளுக்கு மாறுவோம். உதாரணமாக, உங்கள் பணிப்புத்தகத்தின் பெயரை ஒரு கலத்தில் எழுத வேண்டும். இதைச் செய்ய, நீங்கள் தனிப்பயன் செயல்பாட்டை உருவாக்குகிறீர்கள்:

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

    இப்போது பின்வரும் வழக்கை கற்பனை செய்து பாருங்கள். நீங்கள் தனிப்பயன் சூத்திரத்தை =WorkbookName() கலத்தில் எழுதி, கோப்பு பெயரைப் பெற்றுள்ளீர்கள். சிறிது நேரத்தில், கோப்பை மறுபெயரிட முடிவு செய்து, அதை வேறு பெயரில் சேமித்தீர்கள். ஆனால் செல்லில் உள்ள மதிப்பைப் பார்த்து அது மாறாமல் இருப்பதைப் பார்க்கிறீர்கள். இன்னும் பழைய கோப்பு பெயர் உள்ளது, அது சரியல்ல.

    இந்தச் செயல்பாட்டில் வாதங்கள் இல்லாததால், செயல்பாடு மீண்டும் கணக்கிடப்படாது (நீங்கள் பணிப்புத்தகத்தின் பெயரை மாற்றினாலும், அதை மூடிவிட்டு, மீண்டும் திறக்கவும் அது).

    குறிப்பு. உங்கள் கோப்பில் உள்ள அனைத்து செயல்பாடுகளையும் மீண்டும் கணக்கிட, நீங்கள் Ctrl + Alt + F9 குறுக்குவழியைப் பயன்படுத்தலாம்.

    இலகுவான வழி உள்ளதா? ஒர்க்ஷீட் மாறும் ஒவ்வொரு முறையும் ஃபார்முலாவை மீண்டும் கணக்கிடுவதற்கு, உங்களுக்குக் கூடுதல் குறியீடு தேவை. உங்கள் செயல்பாட்டின் தொடக்கத்தில் பின்வரும் குறியீட்டை ஒட்டவும்:

    பயன்பாடு. ஆவியாகும்

    எனவே, உங்கள் குறியீடு இப்படி இருக்கும்:

    செயல்பாடு பணிப்புத்தகத்தின் பெயர்() சரம் பயன்பாடாக. கொந்தளிப்பான பணிப்புத்தகப்பெயர் = ThisWorkbook.Name End Function

    இப்போது உங்கள் UDF நிலையற்றதாக உள்ளது, எனவே பணித்தாளில் ஏதேனும் செல் இருந்தால் அது தானாகவே மீண்டும் கணக்கிடப்படும்மீண்டும் கணக்கிடப்பட்டது அல்லது பணிப்புத்தகத்தில் ஏதேனும் மாற்றம் ஏற்பட்டுள்ளது. நீங்கள் கோப்பின் பெயரை மாற்றியவுடன், அந்த புதுப்பிப்பை உடனடியாகக் காண்பீர்கள்.

    குறிப்பு. பல நிலையற்ற செயல்பாடுகள் உங்கள் எக்செல் வேகத்தை குறைக்கலாம் என்பதை நினைவில் கொள்ளவும். எல்லாவற்றிற்கும் மேலாக, சிக்கலான கணக்கீடுகளைச் செய்யும் மற்றும் பெரிய தரவு வரம்புகளில் தொடர்ந்து செயல்படும் பல தனிப்பயன் செயல்பாடுகள் உள்ளன.

    எனவே, உண்மையில் தேவைப்படும் இடத்தில் மட்டுமே ஏற்ற இறக்கத்தைப் பயன்படுத்த பரிந்துரைக்கிறேன்.

    தனிப்பயன் செயல்பாடுகள் ஏன் கிடைக்கவில்லை

    தனிப்பயன் செயல்பாட்டின் பெயரின் முதல் எழுத்துக்களை உள்ளிடும்போது, ​​அது தோன்றும் உள்ளீட்டு கலத்திற்கு அடுத்துள்ள கீழ்தோன்றும் பட்டியலில், நிலையான எக்செல் செயல்பாடுகளைப் போலவே.

    இருப்பினும், இது எப்போதும் நடக்காது. என்ன தவறுகள் இந்த நிலைமையை ஏற்படுத்தும்?

    உங்களிடம் எக்செல் 2003-2007 இருந்தால், கீழ்தோன்றும் பட்டியலில் UDF ஒருபோதும் தோன்றாது. அங்கு நீங்கள் நிலையான செயல்பாடுகளை மட்டுமே பார்க்க முடியும்.

    ஆனால் நீங்கள் Excel இன் புதிய பதிப்பைப் பயன்படுத்தினாலும், நீங்கள் தற்செயலாக மற்றொரு தவறு செய்யலாம்.

    நீங்கள் பார்க்கிறீர்கள், தனிப்பயன் செயல்பாடு இருக்க வேண்டும். தொகுதிகள் எனப்படும் நிலையான VBA தொகுதி. செயல்பாட்டுக் குறியீட்டை எழுதுவதற்கு நீங்கள் ஒரு புதிய தொகுதியைச் சேர்க்கும்போது, ​​அனைத்து தொகுதிக்கூறுகளும் எழுதப்பட்ட ஒரு தொகுதிக் கோப்புறை தானாகவே உருவாக்கப்படும்.

    ஆனால் சில சமயங்களில் புதிய தொகுதிக்கூறு இல்லை. உருவாக்கப்படுகிறது. அடுத்த ஸ்கிரீன்ஷாட்டில் தனிப்பயன் செயல்பாட்டுக் குறியீடு “மைக்ரோசாப்ட் எக்செல் ஆப்ஜெக்ட்ஸ்” தொகுதியில் இருப்பதைக் காணலாம்.இந்தப் பணிப்புத்தகம்.

    ஒர்க்ஷீட் அல்லது ஒர்க்புக்கின் குறியீடு பகுதியில் தனிப்பயன் செயல்பாட்டை நீங்கள் வைக்க முடியாது. இந்த வழக்கில், செயல்பாடு இயங்காது. மேலும், இது செயல்பாடுகளின் கீழ்தோன்றும் பட்டியலில் தோன்றாது. எனவே, குறியீடு எப்போதும் தொகுதிகள் கோப்புறையில் இருக்க வேண்டும்.

    எக்செல் தனிப்பயன் செயல்பாடு உதவி உரை காட்டப்படாது

    இன்னொரு சிக்கல் நீங்கள் ஒட்டும்போது நீங்கள் காணும் குறிப்பு ஒரு விருப்ப செயல்பாடு. நீங்கள் ஒரு நிலையான செயல்பாட்டைப் பயன்படுத்தினால், செயல்பாடு மற்றும் அதன் வாதங்களுக்கான உதவிக்குறிப்பை எப்போதும் பார்ப்பீர்கள். ஆனால் UDFகளைப் பற்றி என்ன?

    உங்களிடம் நிறைய தனிப்பயன் செயல்பாடுகள் இருந்தால், அவை ஒவ்வொன்றும் என்னென்ன கணக்கீடுகளைச் செய்கின்றன என்பதை நினைவில் கொள்வது உங்களுக்கு மிகவும் கடினமாக இருக்கும். எந்த வாதங்களைப் பயன்படுத்த வேண்டும் என்பதை நினைவில் கொள்வது இன்னும் கடினமாக இருக்கும். உங்கள் தனிப்பயன் செயல்பாடுகளின் விளக்கத்தை நினைவூட்டலாக வைத்திருப்பது நல்லது என்று நினைக்கிறேன்.

    இதற்கு, Application.MacroOptions முறையைப் பயன்படுத்த பரிந்துரைக்கிறேன். இது செயல்பாட்டின் விளக்கத்தை மட்டுமல்ல, அதன் ஒவ்வொரு வாதங்களின் விளக்கத்தையும் Function Wizard சாளரத்தில் காண்பிக்க உதவும். ஃபார்முலா பாரில் Fx பட்டனை கிளிக் செய்யும் போது இந்த விண்டோவை நீங்கள் பார்க்கிறீர்கள்.

    உங்கள் UDF களில் அத்தகைய குறிப்பை எப்படி சேர்ப்பது என்று பார்க்கலாம். முந்தைய கட்டுரையில் GetMaxBetween தனிப்பயன் செயல்பாட்டைப் பார்த்தோம். இது குறிப்பிட்ட வரம்பில் அதிகபட்ச எண்ணைக் கண்டறிந்து, மூன்று வாதங்களை எடுக்கும்: எண் மதிப்புகளின் வரம்பு, மற்றும் அதிகபட்ச மற்றும் குறைந்தபட்ச மதிப்புதேடவும்.

    இப்போது இந்த தனிப்பயன் செயல்பாட்டிற்கான விளக்கத்தைச் சேர்ப்போம். இதைச் செய்ய, Application.MacroOptions கட்டளையை உருவாக்கி இயக்கவும். GetMaxBetween செயல்பாட்டிற்கு, நீங்கள் பின்வரும் கட்டளையை இயக்கலாம்:

    Sub RegisterUDF () Dim strFuncName என நீங்கள் பதிவுசெய்ய விரும்பும் செயல்பாட்டின் String பெயராக Dim strDescr As String ' செயல்பாட்டின் விளக்கம் மங்கலான strArgs () சரம் 'செயல்பாட்டு வாதங்களின் விளக்கமாக ' GetMaxBetween செயல்பாடு ReDim strArgs (1 முதல் 3 வரை) 'உங்கள் செயல்பாட்டில் உள்ள வாதங்களின் எண்ணிக்கை strFuncName = "GetMaxBetween" strDescr = "குறிப்பிட்ட வரம்பில் அதிகபட்ச எண் (1) "எண் மதிப்புகளின் வரம்பு" strArgs (2) = "குறைந்த இடைவெளி எல்லை " strArgs (3) = " மேல் இடைவெளி எல்லை " Application.MacroOptions மேக்ரோ: = strFuncName, _ விளக்கம்: = strDescr, _ ArgumentDescriptions: = strArg "எனது தனிப்பயன் செயல்பாடுகள்" துணை

    அல்லது

    துணைப் பதிவுUDF () விண்ணப்பம்.மேக்ரோஆப்ஷன்ஸ் மேக்ரோ: = "GetMaxBetween" , _ Description: = "குறிப்பிட்ட வரம்பில் உள்ள அதிகபட்ச எண்" , _ வகை: = "எனது தனிப்பயன் செயல்பாடுகள்" , _ ஆர்குமென்ட் விளக்கங்கள்: = வரிசை (_ "எண் மதிப்புகளின் வரம்பு" , _ "குறைந்த இடைவெளி bor der" , _ "மேல் இடைவெளி பார்டர்" ) End Sub

    மாறி str FuncName என்பது செயல்பாட்டின் பெயர். strDescr - செயல்பாடு விளக்கம். strArgs மாறிகள் ஒவ்வொரு வாதத்திற்கும் குறிப்புகளைக் கொண்டிருக்கின்றன.

    நான்காவது வாதம் என்னவென்று நீங்கள் யோசிக்கலாம்.Application.Macrooptions. இந்த விருப்ப வாதம் வகை எனப் பெயரிடப்பட்டுள்ளது மற்றும் எக்செல் செயல்பாடுகளின் வகுப்பைக் குறிக்கிறது, இது எங்கள் தனிப்பயன் GetMaxBetween () செயல்பாடு சேர்க்கப்படும். நீங்கள் ஏற்கனவே உள்ள எந்த வகைகளின் பெயரையும் பெயரிடலாம்: கணிதம் & ; தூண்டுதல், புள்ளியியல், தருக்கம், முதலியன. நீங்கள் உருவாக்கும் செயல்பாடுகளை நீங்கள் வைக்கும் புதிய வகைக்கு ஒரு பெயரைக் குறிப்பிடலாம். நீங்கள் வகை வாதத்தைப் பயன்படுத்தாவிட்டால், தனிப்பயன் செயல்பாடு தானாகவே “பயனர் வரையறுக்கப்பட்ட” பிரிவில் வைக்கப்படும்.

    செயல்பாட்டு குறியீட்டை தொகுதி சாளரத்தில் ஒட்டவும்:

    1>

    பின்னர் "ரன்" பொத்தானைக் கிளிக் செய்யவும். உங்கள் GetMaxBetween() செயல்பாட்டுடன் Fx பொத்தானைப் பயன்படுத்துவதற்கான அனைத்து அமைப்புகளையும் கட்டளை செய்யும்.

    நீங்கள் <ஐப் பயன்படுத்தி ஒரு கலத்தில் ஒரு செயல்பாட்டைச் செருக முயற்சித்தால் 6>செர்ட் செயல்பாடு கருவி, உங்கள் GetMaxBetween செயல்பாடு "எனது தனிப்பயன் செயல்பாடுகள்" பிரிவில் இருப்பதைக் காண்பீர்கள்:

    நீங்கள் கலத்தில் செயல்பாட்டின் பெயரைத் தட்டச்சு செய்யத் தொடங்கலாம் மற்றும் தேர்ந்தெடுக்க வேண்டிய செயல்பாடுகளின் கீழ்தோன்றும் பட்டியலில் உங்கள் தனிப்பயன் செயல்பாட்டைக் காண்பீர்கள்.

    பின்னர் செயல்பாட்டு வழிகாட்டியை அழைக்கவும் Fx பொத்தானுடன் .

    உதவிக்குறிப்பு. செயல்பாட்டு வழிகாட்டியைத் திறக்க, CRTL + A என்ற முக்கிய கலவையையும் பயன்படுத்தலாம்.

    Function Wizard சாளரத்தில் உங்கள் செயல்பாட்டின் விளக்கத்தையும், முதல் வாதத்திற்கான குறிப்பையும் காண்பீர்கள். உங்கள் கர்சரை அதன் மேல் வைத்தால்இரண்டாவது அல்லது மூன்றாவது வாதம், அவற்றுக்கான குறிப்புகளையும் நீங்கள் காண்பீர்கள்.

    இந்த குறிப்புகளின் உரையை மாற்ற விரும்பினால், strDescr மற்றும் strArgs<மதிப்புகளை மாற்றவும். RegisterUDF () குறியீட்டில் 7> மாறிகள். பின்னர் RegisterUDF () கட்டளையை மீண்டும் இயக்கவும்.

    நீங்கள் செய்த அனைத்து அமைப்புகளையும் செயல்தவிர்க்க மற்றும் செயல்பாட்டு விளக்கத்தை அழிக்க விரும்பினால், இந்த குறியீட்டை இயக்கவும்:

    Sub UnregisterUDF () Application.MacroOptions மேக்ரோ: = "GetMaxBetween" , _ விளக்கம்: = Empty , ArgumentDescriptions: = Empty , Category: = Empty End Sub

    நீங்கள் தனிப்பயன் செயல்பாட்டை உள்ளிடும்போது குறிப்பைப் பெற மேலும் ஒரு வழி உள்ளது. செயல்பாட்டின் பெயரை உள்ளிட்டு, பின்னர் Ctrl + Shift + A :

    =GetMaxBetween( + Ctrl + Shift + A ஐ அழுத்தவும்

    செயல்பாட்டின் அனைத்து வாதங்களின் பட்டியலையும் நீங்கள் காண்பீர்கள்:

    துரதிர்ஷ்டவசமாக, இங்கே நீங்கள் செயல்பாட்டின் விளக்கத்தையும் அதன் வாதங்களையும் பார்க்க முடியாது. ஆனால் வாதங்களின் பெயர்கள் மிகவும் தகவலறிந்ததாக இருந்தால், அவையும் உதவியாக இருக்கும். இருப்பினும், இது எதையும் விட சிறந்தது :)

    நிலையான எக்செல் செயல்பாடுகளைப் போல செயல்படும் யுடிஎஃப்களுக்கு இன்டெலிசென்ஸை உருவாக்க இன்னும் கொஞ்சம் வேலை எடுக்கும். துரதிர்ஷ்டவசமாக, மைக்ரோசாப்ட் எந்த விருப்பங்களையும் வழங்கவில்லை. எக்செல்-டிஎன்ஏ இன்டெல்லிசென்ஸ் நீட்டிப்பு மட்டுமே தற்போது கிடைக்கும் ஒரே தீர்வு. டெவலப்பரின் இணையதளத்தில் நீங்கள் கூடுதல் தகவல்களைக் காணலாம்.

    உங்கள் தனிப்பயன் செயல்பாடு வேலை செய்யாதபோது அல்லது செயல்படாதபோது இந்த வழிகாட்டுதல்கள் உங்களுக்குச் சிக்கல்களைத் தீர்க்க உதவும் என்று நம்புகிறோம்.நீங்கள் விரும்பியபடி வேலை செய்யுங்கள். எவ்வாறாயினும், உங்கள் UDF இன்னும் செயல்படத் தவறினால், கருத்துகள் பிரிவில் உங்கள் சிக்கலைத் துல்லியமாக விவரிக்கவும். நாங்கள் அதைக் கண்டுபிடித்து உங்களுக்கான தீர்வைக் கண்டுபிடிக்க முயற்சிப்போம் ;)

    மைக்கேல் பிரவுன் ஒரு பிரத்யேக தொழில்நுட்ப ஆர்வலர், மென்பொருள் கருவிகளைப் பயன்படுத்தி சிக்கலான செயல்முறைகளை எளிதாக்குவதில் ஆர்வம் கொண்டவர். தொழில்நுட்பத் துறையில் ஒரு தசாப்தத்திற்கும் மேலான அனுபவத்துடன், மைக்ரோசாஃப்ட் எக்செல் மற்றும் அவுட்லுக், அத்துடன் கூகுள் தாள்கள் மற்றும் டாக்ஸில் தனது திறமைகளை மெருகேற்றியுள்ளார். மைக்கேலின் வலைப்பதிவு அவரது அறிவையும் நிபுணத்துவத்தையும் மற்றவர்களுடன் பகிர்ந்துகொள்வதற்காக அர்ப்பணிக்கப்பட்டுள்ளது, உற்பத்தித்திறன் மற்றும் செயல்திறனை மேம்படுத்துவதற்கு எளிதாகப் பின்பற்றக்கூடிய உதவிக்குறிப்புகள் மற்றும் பயிற்சிகளை வழங்குகிறது. நீங்கள் ஒரு அனுபவமிக்க நிபுணராக இருந்தாலும் அல்லது தொடக்கநிலையாளராக இருந்தாலும், மைக்கேலின் வலைப்பதிவு இந்த அத்தியாவசிய மென்பொருள் கருவிகளில் இருந்து அதிகமானவற்றைப் பெறுவதற்கு மதிப்புமிக்க நுண்ணறிவுகளையும் நடைமுறை ஆலோசனைகளையும் வழங்குகிறது.