Excel UDF काम करत नाही: समस्या आणि उपाय

  • ह्याचा प्रसार करा
Michael Brown

या लेखात, तुमच्या वर्कबुकमधील सानुकूल फंक्शन्स वापरताना तुम्हाला कोणत्या समस्यांना सामोरे जावे लागू शकते यावर आम्ही एक नजर टाकू. त्यांना काय कारणीभूत आहे आणि ते किती सहजपणे सोडवले जाऊ शकतात हे मी तुम्हाला दाखवण्याचा प्रयत्न करेन.

आम्ही याबद्दल बोलू:

    पूर्वी आम्ही काय याबद्दल बोललो होतो कस्टम फंक्शन म्हणजे ते कसे तयार करायचे आणि कसे वापरायचे. तुम्हाला UDF चे मूलभूत ज्ञान अगोदर रिफ्रेश करणे आवश्यक आहे असे वाटत असल्यास, थोडा विराम द्या आणि माझा मागील लेख पहा.

    Excel UDF पुनर्गणना का करत नाही?

    जेव्हा तुम्ही यामध्ये कोणतेही बदल करता तुमची कार्यपुस्तिका, एक्सेल तुमच्याकडे असलेल्या प्रत्येक सूत्राची पुनर्गणना करणार नाही. हे केवळ बदललेल्या सेलशी लिंक केलेल्या सूत्रांचे परिणाम अद्यतनित करेल.

    परंतु हे मानक Excel कार्यांशी संबंधित आहे. सानुकूल लोकांसाठी, एक्सेल VBA कोड प्रमाणित करू शकत नाही आणि इतर सेल ओळखू शकत नाही जे सानुकूल कार्याच्या परिणामावर देखील परिणाम करू शकतात. त्यामुळे, तुम्ही वर्कबुकमध्ये बदल करता तेव्हा तुमचा सानुकूल फॉर्म्युला बदलू शकत नाही.

    समस्येचे निराकरण करण्यासाठी, तुम्हाला फक्त Application.Volatile स्टेटमेंट वापरावे लागेल. ते कसे लागू करायचे यावरील चरण-दर-चरण सूचना जाणून घेण्यासाठी पुढील प्रकरण पहा.

    अस्थिर वि नॉन-अस्थिर कस्टम फंक्शन्स

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

    चला शब्दांवरून उदाहरणांवर जाऊ. उदाहरणार्थ, तुम्हाला तुमच्या वर्कबुकचे नाव सेलमध्ये लिहावे लागेल. हे करण्यासाठी, तुम्ही कस्टम फंक्शन तयार करा:

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

    आता खालील केसची कल्पना करा. तुम्ही सेलमध्ये कस्टम फॉर्म्युला =WorkbookName() लिहिले आणि तेथे फाइलचे नाव मिळाले. थोड्या वेळाने, तुम्ही फाइलचे नाव बदलण्याचा निर्णय घेतला आणि ती वेगळ्या नावाने सेव्ह केली. परंतु आपण सेलमधील मूल्य पहा आणि ते बदललेले नाही हे पहा. अजूनही एक जुने फाइल नाव आहे जे यापुढे योग्य नाही.

    या फंक्शनमध्ये कोणतेही वितर्क नसल्यामुळे, फंक्शनची पुनर्गणना केली जात नाही (जरी तुम्ही वर्कबुकचे नाव बदलले, ते बंद करा आणि नंतर पुन्हा उघडा. ते).

    टीप. तुमच्या फाइलमधील सर्व फंक्शन्सची पुनर्गणना करण्यासाठी तुम्ही Ctrl + Alt + F9 शॉर्टकट वापरू शकता.

    कोणता सोपा मार्ग आहे का? प्रत्येक वेळी वर्कशीट बदलताना सूत्राची पुनर्गणना करण्यासाठी, तुम्हाला कोडची अतिरिक्त ओळ आवश्यक आहे. तुमच्या फंक्शनच्या सुरुवातीला कोडचा खालील भाग पेस्ट करा:

    Application.Volatile

    म्हणून, तुमचा कोड असा दिसेल:

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

    आता तुमचा UDF अस्थिर आहे, त्यामुळे वर्कशीटमधील कोणताही सेल असल्यास ते आपोआप पुन्हा मोजले जाईलपुनर्गणना केली गेली आहे किंवा कार्यपुस्तिकेत कोणताही बदल झाला आहे. तुम्ही फाइलचे नाव बदलताच, तुम्हाला ते अपडेट लगेच दिसेल.

    टीप. कृपया लक्षात ठेवा की खूप जास्त अस्थिर फंक्शन्स तुमचा Excel धीमा करू शकतात. शेवटी, अशी बरीच सानुकूल कार्ये आहेत जी जटिल गणना करतात आणि मोठ्या डेटा श्रेणींवर सतत कार्य करतात.

    म्हणून, मी फक्त अस्थिरता वापरण्याची शिफारस करतो जिथे खरोखर आवश्यक आहे.

    सानुकूल कार्ये उपलब्ध का नाहीत

    जेव्हा तुम्ही सानुकूल फंक्शनच्या नावाची पहिली अक्षरे प्रविष्ट करता तेव्हा ते दिसते इनपुट सेलच्या पुढील ड्रॉप-डाउन सूचीमध्ये, मानक एक्सेल फंक्शन्सप्रमाणेच.

    तथापि, हे नेहमीच घडत नाही. कोणत्या चुकांमुळे ही परिस्थिती उद्भवू शकते?

    तुमच्याकडे Excel 2003-2007 असल्यास, UDF कधीही ड्रॉपडाउन सूचीमध्ये दिसणार नाही. तेथे तुम्ही फक्त मानक फंक्शन पाहू शकता.

    परंतु तुम्ही Excel ची नवीन आवृत्ती वापरत असलो तरीही, तुम्ही चुकून आणखी एक चूक करू शकता.

    तुम्ही पहा, सानुकूल फंक्शन असणे आवश्यक आहे. मॉड्यूल नावाचे मानक VBA मॉड्यूल. जेव्हा तुम्ही फंक्शन कोड लिहिण्यासाठी नवीन मॉड्यूल जोडता, तेव्हा एक मॉड्यूल फोल्डर आपोआप तयार होते ज्यामध्ये सर्व मॉड्यूल्स लिहिले जातात.

    परंतु कधीकधी असे होते की नवीन मॉड्यूल नाही तयार होत आहे. पुढील स्क्रीनशॉटवर तुम्ही पाहू शकता की सानुकूल फंक्शन कोड "Microsoft Excel Objects" मॉड्यूलमध्ये आहे.हे वर्कबुक.

    मुद्दा असा आहे की तुम्ही वर्कशीट किंवा वर्कबुकच्या कोड एरियामध्ये कस्टम फंक्शन ठेवू शकत नाही. या प्रकरणात, फंक्शन कार्य करणार नाही. शिवाय, ते फंक्शन्सच्या ड्रॉपडाउन सूचीमध्ये दिसणार नाही. म्हणून, कोड नेहमी मॉड्यूल्स फोल्डरमध्ये असावा.

    एक्सेल कस्टम फंक्शन मदत मजकूर प्रदर्शित होत नाही

    दुसरी समस्या उद्भवू शकते ती म्हणजे तुम्ही पेस्ट करता तेव्हा तुम्हाला दिसणारा इशारा. एक सानुकूल कार्य. जर तुम्ही मानक फंक्शन वापरत असाल, तर तुम्हाला नेहमी फंक्शन आणि त्याच्या वितर्कांसाठी टूलटिप दिसेल. पण UDF चे काय?

    तुमच्याकडे बरीच सानुकूल फंक्शन्स असल्यास, त्या प्रत्येकाने कोणती गणना केली हे लक्षात ठेवणे तुमच्यासाठी अत्यंत कठीण जाईल. कोणते युक्तिवाद वापरायचे हे लक्षात ठेवणे आणखी कठीण होईल. मला वाटते की तुमच्या सानुकूल कार्यांचे स्मरणपत्र म्हणून वर्णन करणे चांगली कल्पना असेल.

    यासाठी, मी Application.MacroOptions पद्धत वापरण्याचा सल्ला देतो. फंक्शन विझार्ड विंडोमध्ये फंक्शनचेच नव्हे तर त्यातील प्रत्येक आर्ग्युमेंटचे वर्णनही दाखवण्यात हे तुम्हाला मदत करेल. जेव्हा तुम्ही फॉर्म्युला बारमधील Fx बटणावर क्लिक करता तेव्हा तुम्हाला ही विंडो दिसेल.

    तुमच्या UDF मध्ये असा इशारा कसा जोडायचा ते पाहू. मागील लेखात आम्ही GetMaxBetween कस्टम फंक्शन पाहिले. हे निर्दिष्ट श्रेणीमध्ये कमाल संख्या शोधते आणि तीन वितर्क घेते: संख्यात्मक मूल्यांची श्रेणी, आणि कमाल आणि किमान मूल्यसाठी शोधा.

    आता आम्ही या सानुकूल कार्यासाठी वर्णन जोडू. हे करण्यासाठी, Application.MacroOptions कमांड तयार करा आणि चालवा. GetMaxBetween फंक्शनसाठी, तुम्ही खालील कमांड चालवू शकता:

    Sub RegisterUDF () Dim strFuncName as String 'तुम्हाला डिम strDescr स्ट्रिंग म्हणून नोंदणी करायची आहे त्या फंक्शनचे नाव' फंक्शनचे वर्णन स्वतः मंद करा strArgs () स्ट्रिंग 'फंक्शन वितर्कांचे वर्णन' म्हणून नोंदणी करा GetMaxBetween फंक्शन ReDim strArgs (1 ते 3) 'तुमच्या फंक्शनमधील वितर्कांची संख्या strFuncName = "GetMaxBetween" strDescr = "निर्दिष्ट श्रेणीतील कमाल संख्या strArgs = (1)" "अंकीय मूल्यांची श्रेणी" strArgs (2) = "लोअर इंटरव्हल बॉर्डर" strArgs (3) = "अप्पर इंटरव्हल बॉर्डर" Application.MacroOptions Macro: = strFuncName, _ वर्णन: = strDescr, _ ArgumentDescriptions: = strArgs, = _ Cas "माय कस्टम फंक्शन्स" एंड सब

    किंवा

    सब रजिस्टर यूडीएफ () ऍप्लिकेशन. मॅक्रो ऑप्शन मॅक्रो: = "GetMaxBetween" , _ वर्णन: = "निर्दिष्ट श्रेणीतील कमाल संख्या" , _ श्रेणी: = "माझे सानुकूल कार्ये" , _ आर्ग्युमेंट वर्णन: = अॅरे (_ "संख्यात्मक मूल्यांची श्रेणी" , _ "लोअर इंटरव्हल बोर der" , _ "अपर इंटरव्हल बॉर्डर" ) End Sub

    Variable str FuncName हे फंक्शनचे नाव आहे. strDescr - कार्य वर्णन. strArgs व्हेरिएबल्समध्ये प्रत्येक वितर्कासाठी संकेत असतात.

    तुम्हाला आश्चर्य वाटेल की चौथा वितर्क काय आहेऍप्लिकेशन.मॅक्रो ऑप्शन. या पर्यायी युक्तिवादाला श्रेणी नाव देण्यात आले आहे आणि आमचे सानुकूल GetMaxBetween () फंक्शन ठेवले जाईल असे एक्सेल फंक्शन्सचे वर्ग सूचित करते. तुम्ही सध्याच्या कोणत्याही श्रेणीनुसार त्याचे नाव देऊ शकता: गणित आणि ; ट्रिग, स्टॅटिस्टिकल, लॉजिकल इ. तुम्ही नवीन श्रेणीसाठी नाव निर्दिष्ट करू शकता ज्यामध्ये तुम्ही तयार केलेली फंक्शन्स ठेवता. तुम्ही श्रेणी युक्तिवाद वापरत नसल्यास, कस्टम फंक्शन आपोआप “वापरकर्ता परिभाषित” श्रेणीमध्ये ठेवले जाईल.

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

    नंतर "रन" बटणावर क्लिक करा. कमांड तुमच्या GetMaxBetween() फंक्शनसह Fx बटण वापरण्यासाठी सर्व सेटिंग्ज करेल.

    तुम्ही <वापरून सेलमध्ये फंक्शन घालण्याचा प्रयत्न केल्यास 6>Insert Function टूल, तुम्हाला दिसेल की तुमचे GetMaxBetween फंक्शन "माय कस्टम फंक्शन्स" वर्गात आहे:

    तुम्ही फक्त सेलमध्ये फंक्शनचे नाव टाइप करणे सुरू करू शकता आणि तुम्हाला तुमचे कस्टम फंक्शन फंक्शन्सच्या ड्रॉपडाउन सूचीमध्ये दिसेल.

    नंतर फंक्शन विझार्डला कॉल करा Fx बटणासह.

    टीप. फंक्शन विझार्ड उघडण्यासाठी तुम्ही CRTL + A हे की संयोजन देखील वापरू शकता.

    फंक्शन विझार्ड विंडोमध्ये तुम्हाला तुमच्या फंक्शनचे वर्णन दिसेल, तसेच पहिल्या युक्तिवादासाठी इशारा दिसेल. तुम्ही तुमचा कर्सर वर ठेवल्यासदुसरा किंवा तिसरा युक्तिवाद, तुम्हाला त्यांच्यासाठी संकेत देखील दिसतील.

    तुम्हाला या सूचनांचा मजकूर बदलायचा असल्यास, strDescr आणि strArgs<चे मूल्य बदला. 7> RegisterUDF () कोडमधील व्हेरिएबल्स. नंतर RegisterUDF () कमांड पुन्हा चालवा.

    तुम्हाला केलेल्या सर्व सेटिंग्ज पूर्ववत करायच्या असतील आणि फंक्शनचे वर्णन साफ ​​करायचे असेल, तर हा कोड चालवा:

    सब अनरेजिस्टरयूडीएफ () Application.MacroOptions मॅक्रो: = "GetMaxBetween" , _ वर्णन: = Empty , ArgumentDescriptions: = Empty , Category: = Empty End Sub

    तुम्ही कस्टम फंक्शन एंटर करता तेव्हा इशारा मिळवण्याचा आणखी एक मार्ग आहे. फंक्शनचे नाव एंटर करा आणि नंतर Ctrl + Shift + A :

    =GetMaxBetween( + Ctrl + Shift + A दाबा

    तुम्हाला सर्व फंक्शनच्या वितर्कांची सूची दिसेल:

    दुर्दैवाने, येथे तुम्हाला फंक्शनचे वर्णन आणि वितर्क दिसणार नाहीत. परंतु जर युक्तिवादांची नावे खूपच माहितीपूर्ण असतील, तर ती देखील उपयुक्त ठरतील. तरीही, हे काहीही न करण्यापेक्षा चांगले आहे :)

    मानक एक्सेल फंक्शन्सप्रमाणे काम करणार्‍या UDF साठी इंटेलिसेंस तयार करण्यासाठी थोडे अधिक काम करावे लागेल. दुर्दैवाने, मायक्रोसॉफ्ट कोणतेही पर्याय प्रदान करत नाही. सध्या उपलब्ध असलेला एकमेव उपाय म्हणजे Excel-DNA IntelliSense विस्तार आहे. तुम्ही विकसकाच्या वेबसाइटवर अधिक माहिती मिळवू शकता.

    आशा आहे, तुमचे कस्टम फंक्शन काम करत नाही किंवा करत नाही तेव्हा ही मार्गदर्शक तत्त्वे तुम्हाला समस्या सोडवण्यास मदत करतील.तुम्हाला पाहिजे तसे काम करा. तरीही, तुमचा UDF अद्याप कार्य करू शकत नसल्यास, कृपया टिप्पण्या विभागात तुमच्या समस्येचे अचूक वर्णन करा. आम्ही ते शोधण्याचा आणि तुमच्यासाठी उपाय शोधण्याचा प्रयत्न करू ;)

    मायकेल ब्राउन हे सॉफ्टवेअर टूल्स वापरून जटिल प्रक्रिया सुलभ करण्याच्या उत्कटतेने एक समर्पित तंत्रज्ञान उत्साही आहे. टेक उद्योगातील एका दशकाहून अधिक अनुभवासह, त्यांनी Microsoft Excel आणि Outlook, तसेच Google Sheets आणि Docs मध्ये आपल्या कौशल्यांचा गौरव केला आहे. मायकेलचा ब्लॉग त्याचे ज्ञान आणि कौशल्य इतरांसोबत सामायिक करण्यासाठी समर्पित आहे, उत्पादकता आणि कार्यक्षमता सुधारण्यासाठी सुलभ टिपा आणि ट्यूटोरियल प्रदान करतो. तुम्ही अनुभवी व्यावसायिक असाल किंवा नवशिक्या असाल, मायकेलचा ब्लॉग या आवश्यक सॉफ्टवेअर टूल्सचा जास्तीत जास्त फायदा घेण्यासाठी मौल्यवान अंतर्दृष्टी आणि व्यावहारिक सल्ला देतो.