एक्सेल यूडीएफ काम नहीं कर रहा है: समस्याएं और समाधान

  • इसे साझा करें
Michael Brown

इस लेख में, हम उन समस्याओं पर एक नज़र डालेंगे जिनका सामना आप अपनी कार्यपुस्तिकाओं में कस्टम फ़ंक्शन का उपयोग करते समय कर सकते हैं। मैं आपको यह दिखाने की कोशिश करूंगा कि उनके कारण क्या हैं और उन्हें कितनी आसानी से हल किया जा सकता है।

यहां हम किस बारे में बात करेंगे:

    पहले हमने बात की थी कि क्या कस्टम फ़ंक्शन है, इसे कैसे बनाया और उपयोग किया जाए। अगर आपको लगता है कि आपको यूडीएफ के बुनियादी ज्ञान को पहले से ताज़ा करने की आवश्यकता है, तो एक विराम लें और मेरे पिछले लेख को देखें।

    एक्सेल यूडीएफ पुनर्गणना क्यों नहीं कर रहा है?

    जब आप इसमें कोई बदलाव करते हैं आपकी कार्यपुस्तिका, एक्सेल आपके पास मौजूद प्रत्येक सूत्र की पुनर्गणना नहीं करेगा। यह उन फ़ार्मुलों के परिणामों को अपडेट करेगा जो केवल परिवर्तित सेल से जुड़े हैं।

    लेकिन यह मानक एक्सेल फ़ंक्शंस से संबंधित है। कस्टम वालों के लिए, एक्सेल VBA कोड को मान्य नहीं कर सकता है और अन्य कोशिकाओं की पहचान नहीं कर सकता है जो कस्टम फ़ंक्शन के परिणाम को भी प्रभावित कर सकते हैं। इसलिए, जब आप कार्यपुस्तिका में परिवर्तन करते हैं तो आपका कस्टम सूत्र परिवर्तित नहीं हो सकता है।

    समस्या को ठीक करने के लिए, आपको केवल Application.Volatile कथन का उपयोग करने की आवश्यकता होगी। इसे लागू करने के तरीके पर चरण-दर-चरण निर्देश जानने के लिए अगला अध्याय देखें।

    वोलाटाइल बनाम नॉन-वोलेटाइल कस्टम फ़ंक्शंस

    डिफ़ॉल्ट रूप से, एक्सेल में कस्टम फ़ंक्शंस अस्थिर नहीं होते हैं। इसका मतलब यह है कि यूडीएफ की पुनर्गणना तभी की जाती है जब किसी भी सेल का मूल्य परिवर्तन को संदर्भित करता है। लेकिन अगर कोशिकाओं का स्वरूप, का नामवर्कशीट, फ़ाइल का नाम बदल जाता है, तो UDF में कोई परिवर्तन नहीं होगा।

    चलिए शब्दों से उदाहरणों पर स्विच करते हैं। उदाहरण के लिए, आपको सेल में अपनी कार्यपुस्तिका का नाम लिखना होगा। ऐसा करने के लिए, आप एक कस्टम फ़ंक्शन बनाते हैं:

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

    अब निम्नलिखित मामले की कल्पना करें। आपने कस्टम सूत्र =WorkbookName() सेल में लिखा और वहां फ़ाइल का नाम मिला। थोड़ी देर में, आपने फ़ाइल का नाम बदलने का फैसला किया और इसे एक अलग नाम से सहेजा। लेकिन आप सेल में मान को देखते हैं और देखते हैं कि यह नहीं बदला है। अभी भी एक पुराना फ़ाइल नाम है जो अब सही नहीं है।

    चूंकि इस फ़ंक्शन में कोई तर्क नहीं हैं, इसलिए फ़ंक्शन की पुनर्गणना नहीं की जाती है (भले ही आप कार्यपुस्तिका का नाम बदल दें, इसे बंद कर दें और फिर से खोलें यह)।

    ध्यान दें। अपनी फ़ाइल में सभी कार्यों की पुनर्गणना करने के लिए, आप Ctrl + Alt + F9 शॉर्टकट का उपयोग कर सकते हैं।

    क्या कोई आसान तरीका है? हर बार वर्कशीट बदलने पर सूत्र को पुनर्गणना करने के लिए, आपको कोड की एक अतिरिक्त पंक्ति की आवश्यकता होती है। अपने फ़ंक्शन की शुरुआत में निम्नलिखित कोड पेस्ट करें:

    Application.Volatile

    तो, आपका कोड इस तरह दिखेगा:

    फ़ंक्शन WorkbookName() As String Application.Volatile WorkbookName = ThisWorkbook.Name End Function

    अब आपका UDF अस्थिर है, इसलिए यदि वर्कशीट में कोई सेल है तो यह स्वचालित रूप से पुनर्गणना की जाएगीपुनर्गणना की गई है या कार्यपुस्तिका में कोई परिवर्तन हुआ है। जैसे ही आप फ़ाइल का नाम बदलते हैं, आपको वह अपडेट तुरंत दिखाई देगा।

    ध्यान दें। कृपया ध्यान रखें कि बहुत अधिक अस्थिर कार्य आपके एक्सेल को धीमा कर सकते हैं। आखिरकार, बहुत सारे कस्टम फ़ंक्शन हैं जो जटिल गणना करते हैं और बड़ी डेटा श्रेणियों पर लगातार काम करते हैं।

    इसलिए, मैं सिर्फ अस्थिरता का उपयोग करने की सलाह देता हूं जहां वास्तव में इसकी आवश्यकता है।

    कस्टम फ़ंक्शन उपलब्ध क्यों नहीं हैं

    जब आप कस्टम फ़ंक्शन के नाम के पहले अक्षर दर्ज करते हैं, तो यह दिखाई देता है इनपुट सेल के बगल में स्थित ड्रॉप-डाउन सूची में, मानक एक्सेल फ़ंक्शंस की तरह।

    हालांकि, ऐसा हमेशा नहीं होता है। कौन सी गलतियाँ इस स्थिति का कारण बन सकती हैं?

    यदि आपके पास Excel 2003-2007 है, तो UDF कभी भी ड्रॉपडाउन सूची में प्रकट नहीं होता है। वहां आप केवल मानक कार्य देख सकते हैं।

    लेकिन भले ही आप एक्सेल के एक नए संस्करण का उपयोग कर रहे हों, एक और गलती है जो आप गलती से कर सकते हैं।

    आप देखते हैं, कस्टम फ़ंक्शन अंदर होना चाहिए एक मानक VBA मॉड्यूल जिसे मॉड्यूल कहा जाता है। जब आप फ़ंक्शन कोड लिखने के लिए एक नया मॉड्यूल जोड़ते हैं, तो एक मॉड्यूल फ़ोल्डर अपने आप बन जाता है जिसमें सभी मॉड्यूल लिखे होते हैं।

    लेकिन कभी-कभी ऐसा होता है कि एक नया मॉड्यूल नहीं होता है बनाया जा रहा है। अगले स्क्रीनशॉट पर आप देख सकते हैं कि कस्टम फ़ंक्शन कोड "माइक्रोसॉफ्ट एक्सेल ऑब्जेक्ट्स" मॉड्यूल के साथ हैThisWorkbook.

    बात यह है कि आप वर्कशीट या वर्कबुक के कोड एरिया में कस्टम फंक्शन नहीं रख सकते हैं। इस मामले में समारोह काम नहीं करेगा। इसके अलावा, यह कार्यों की ड्रॉपडाउन सूची में प्रकट नहीं होगा। इसलिए, कोड हमेशा फ़ोल्डर मॉड्यूल में होना चाहिए।

    Excel कस्टम फ़ंक्शन सहायता पाठ प्रदर्शित नहीं होता है

    एक और समस्या हो सकती है वह संकेत है जो आप पेस्ट करते समय देखते हैं एक कस्टम समारोह। यदि आप एक मानक फ़ंक्शन का उपयोग करते हैं, तो आपको फ़ंक्शन और उसके तर्कों के लिए हमेशा एक टूलटिप दिखाई देगी। लेकिन यूडीएफ के बारे में क्या?

    यदि आपके पास बहुत सारे कस्टम फ़ंक्शन हैं, तो आपके लिए यह याद रखना बेहद मुश्किल होगा कि उनमें से प्रत्येक क्या गणना करता है। यह याद रखना और भी कठिन होगा कि कौन से तर्कों का उपयोग किया जाए। मुझे लगता है कि अनुस्मारक के रूप में आपके कस्टम कार्यों का विवरण होना एक अच्छा विचार होगा।

    इसके लिए, मैं Application.MacroOptions विधि का उपयोग करने का सुझाव दूंगा। यह आपको फ़ंक्शन विज़ार्ड विंडो में न केवल फ़ंक्शन बल्कि इसके प्रत्येक तर्कों का विवरण दिखाने में मदद करेगा। जब आप फॉर्मूला बार में एफएक्स बटन पर क्लिक करते हैं तो आपको यह विंडो दिखाई देती है। पिछले लेख में हमने GetMaxBetween कस्टम फ़ंक्शन को देखा था। यह निर्दिष्ट सीमा में अधिकतम संख्या पाता है और तीन तर्क लेता है: संख्यात्मक मानों की एक सीमा, और एक अधिकतम और न्यूनतम मानके लिए खोजें।

    अब हम इस कस्टम फ़ंक्शन के लिए एक विवरण जोड़ेंगे। ऐसा करने के लिए, Application.MacroOptions कमांड बनाएं और चलाएं। GetMaxBetween फंक्शन के लिए, आप निम्नलिखित कमांड चला सकते हैं:

    Sub RegisterUDF () Dim strFuncName As String 'नाम आप रजिस्टर करना चाहते हैं Dim strDescr As String' फंक्शन का विवरण स्वयं Dim strArgs () स्ट्रिंग के रूप में 'फ़ंक्शन तर्कों का विवरण' रजिस्टर GetMaxBetween फ़ंक्शन ReDim strArgs (1 से 3) 'आपके फ़ंक्शन में तर्कों की संख्या strFuncName = "GetMaxBetween" strDescr = "निर्दिष्ट सीमा में अधिकतम संख्या" strArgs (1) = "संख्यात्मक मानों की श्रेणी" strArgs (2) = "कम अंतराल सीमा" strArgs (3) = "ऊपरी अंतराल सीमा" अनुप्रयोग। MacroOptions मैक्रो: = strFuncName, _ विवरण: = strDescr, _ ArgumentDescriptions: = strArgs, _ श्रेणी: = "माई कस्टम फ़ंक्शंस" एंड सब

    या

    सब रजिस्टरयूडीएफ () एप्लिकेशन। मैक्रोऑप्शन मैक्रो: = "गेटमैक्सबेटवीन", _ विवरण: = "निर्दिष्ट सीमा में अधिकतम संख्या", _ श्रेणी: = "मेरा कस्टम फ़ंक्शंस", _ तर्क विवरण: = सरणी (_ "संख्यात्मक मानों की श्रेणी", _ "कम अंतराल बोर der" , _ "ऊपरी अंतराल सीमा") एंड सब

    वेरिएबल str FuncName फ़ंक्शन का नाम है। strDescr - फ़ंक्शन विवरण। strArgs चर में प्रत्येक तर्क के लिए संकेत होते हैं।

    आप सोच सकते हैं कि चौथा तर्क क्या हैअनुप्रयोग। मैक्रोऑप्शन। इस वैकल्पिक तर्क को श्रेणी नाम दिया गया है और एक्सेल कार्यों के उस वर्ग को इंगित करता है जिसमें हमारा कस्टम GetMaxBetween () कार्य रखा जाएगा। आप इसे मौजूदा श्रेणियों में से किसी के नाम पर रख सकते हैं: गणित और amp ; ट्रिग, सांख्यिकीय, तार्किक, आदि। आप उस नई श्रेणी के लिए एक नाम निर्दिष्ट कर सकते हैं जिसमें आप अपने द्वारा बनाए गए कार्यों को रखेंगे। यदि आप श्रेणी तर्क का उपयोग नहीं करते हैं, तो कस्टम फ़ंक्शन स्वचालित रूप से "उपयोगकर्ता परिभाषित" श्रेणी में रखा जाएगा।

    फ़ंक्शन कोड को मॉड्यूल विंडो में पेस्ट करें:

    फिर “रन” बटन पर क्लिक करें। यह आदेश आपके GetMaxBetween() फ़ंक्शन के साथ Fx बटन का उपयोग करने के लिए सभी सेटिंग्स निष्पादित करेगा।

    यदि आप <का उपयोग करके किसी सेल में कोई फ़ंक्शन डालने का प्रयास करते हैं 6>इन्सर्ट फंक्शन टूल, आप देखेंगे कि आपका GetMaxBetween फंक्शन "माय कस्टम फंक्शन्स" श्रेणी में है:

    आप बस सेल में फ़ंक्शन नाम टाइप करना शुरू कर सकते हैं और आप अपने कस्टम फ़ंक्शन को फ़ंक्शन की ड्रॉपडाउन सूची में से चुनने के लिए देखेंगे।

    फिर फ़ंक्शन विज़ार्ड को कॉल करें Fx बटन के साथ।

    टिप। फंक्शन विज़ार्ड खोलने के लिए आप कुंजी संयोजन CRTL + A का भी उपयोग कर सकते हैं।

    फ़ंक्शन विज़ार्ड विंडो में आपको अपने फ़ंक्शन का विवरण और साथ ही पहले तर्क के लिए एक संकेत दिखाई देगा। यदि आप पर अपना कर्सर रखते हैंदूसरा या तीसरा तर्क, आप उनके लिए संकेत भी देखेंगे।

    यदि आप इन संकेतों के पाठ को बदलना चाहते हैं, तो strDescr और strArgs<के मानों को बदलें। RegisterUDF () कोड में 7> वेरिएबल्स। इसके बाद फिर से RegisterUDF () कमांड चलाएँ। Application.MacroOptions Macro: = "GetMaxBetween", _ विवरण: = खाली, तर्क विवरण: = खाली, श्रेणी: = खाली अंत उप

    जब आप कस्टम फ़ंक्शन दर्ज करते हैं तो संकेत प्राप्त करने का एक और तरीका है। फ़ंक्शन का नाम दर्ज करें और फिर Ctrl + Shift + A दबाएं :

    =GetMaxBetween( + Ctrl + Shift + A

    आपको फ़ंक्शन के सभी तर्कों की एक सूची दिखाई देगी:

    दुर्भाग्य से, यहां आपको फ़ंक्शन और उसके तर्कों का विवरण दिखाई नहीं देगा। लेकिन अगर तर्कों के नाम काफी जानकारीपूर्ण हैं, तो वे मददगार भी हो सकते हैं। फिर भी, यह कुछ भी नहीं से बेहतर है :)

    यूडीएफ के लिए इंटेलिजेंस बनाने में थोड़ा और काम लगेगा जो मानक एक्सेल कार्यों की तरह काम करता है। दुर्भाग्य से, Microsoft कोई विकल्प प्रदान नहीं करता है। वर्तमान में उपलब्ध एकमात्र समाधान एक्सेल-डीएनए इंटेलीसेंस एक्सटेंशन है। आप डेवलपर की वेबसाइट पर अधिक जानकारी प्राप्त कर सकते हैं।

    उम्मीद है, जब आपका कस्टम फ़ंक्शन काम नहीं करता है या नहीं करता है तो ये दिशानिर्देश आपको समस्याओं को हल करने में मदद करेंगे।जैसा चाहो वैसा काम करो। यदि फिर भी, आपका UDF अभी भी कार्य करने में विफल रहता है, तो कृपया टिप्पणी अनुभाग में अपनी समस्या का सटीक वर्णन करें। हम इसका पता लगाने और आपके लिए समाधान खोजने का प्रयास करेंगे;)

    माइकल ब्राउन सॉफ्टवेयर टूल्स का उपयोग करके जटिल प्रक्रियाओं को सरल बनाने के जुनून के साथ एक समर्पित प्रौद्योगिकी उत्साही है। टेक उद्योग में एक दशक से अधिक के अनुभव के साथ, उन्होंने माइक्रोसॉफ्ट एक्सेल और आउटलुक के साथ-साथ गूगल शीट्स और डॉक्स में अपने कौशल को निखारा है। माइकल का ब्लॉग अपने ज्ञान और विशेषज्ञता को दूसरों के साथ साझा करने के लिए समर्पित है, उत्पादकता और दक्षता में सुधार के लिए आसान-से-अनुसरण युक्तियाँ और ट्यूटोरियल प्रदान करता है। चाहे आप एक अनुभवी पेशेवर हों या नौसिखिए, माइकल का ब्लॉग इन आवश्यक सॉफ़्टवेयर उपकरणों से अधिकाधिक लाभ उठाने के लिए मूल्यवान अंतर्दृष्टि और व्यावहारिक सलाह प्रदान करता है।