एक्सेल UDF काम गरिरहेको छैन: समस्या र समाधान

  • यो साझा गर्नुहोस्
Michael Brown

यस लेखमा, हामी तपाइँको कार्यपुस्तिकाहरूमा अनुकूलन प्रकार्यहरू प्रयोग गर्दा सामना गर्न सक्ने समस्याहरूलाई हेर्नेछौं। म तपाईलाई देखाउने प्रयास गर्नेछु कि तिनीहरू के कारणले गर्दा र कसरी सजिलै समाधान गर्न सकिन्छ।

हामी के बारे कुरा गर्नेछौं:

    पहिले हामीले के बारे कुरा गर्यौं। अनुकूलन प्रकार्य हो, यसलाई कसरी सिर्जना गर्ने र प्रयोग गर्ने। यदि तपाईंलाई पहिले नै UDF को आधारभूत ज्ञान ताजा गर्न आवश्यक छ जस्तो लाग्छ भने, एक पज गर्नुहोस् र मेरो अघिल्लो लेख हेर्नुहोस्।

    एक्सेल 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 अस्थिर छ, त्यसैले कार्यपत्रमा कुनै सेल भएमा यो स्वतः पुन: गणना हुनेछ।पुन: गणना गरिएको छ वा कार्यपुस्तिकामा कुनै परिवर्तन भएको छ। तपाईंले फाइलको नाम परिवर्तन गर्ने बित्तिकै, तपाईंले त्यो अपडेट तुरुन्तै देख्नुहुनेछ।

    नोट। कृपया ध्यान राख्नुहोस् कि धेरै अस्थिर प्रकार्यहरूले तपाईंको एक्सेललाई ढिलो गर्न सक्छ। आखिर, त्यहाँ धेरै अनुकूलन प्रकार्यहरू छन् जसले जटिल गणनाहरू प्रदर्शन गर्दछ र ठूला डाटा दायराहरूमा निरन्तर रूपमा सञ्चालन गर्दछ।

    त्यसैले, म अस्थिरतालाई वास्तवमै आवश्यक भएको ठाउँमा मात्र प्रयोग गर्न सिफारिस गर्छु।

    कस्टम प्रकार्यहरू किन उपलब्ध छैनन्

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

    यद्यपि, यो सधैं हुँदैन। के गल्तीहरूले यो अवस्था निम्त्याउन सक्छ?

    यदि तपाईंसँग एक्सेल 2003-2007 छ भने, UDF ड्रपडाउन सूचीमा कहिल्यै देखा पर्दैन। त्यहाँ तपाईँले मानक प्रकार्यहरू मात्र देख्न सक्नुहुन्छ।

    तर यदि तपाईँले Excel को नयाँ संस्करण प्रयोग गरिरहनुभएको छ भने, तपाईँले संयोगवश गर्न सक्ने अर्को गल्ती छ।

    तपाईँले देख्नुहुन्छ, अनुकूलन प्रकार्य भित्र हुनुपर्छ। एक मानक VBA मोड्युल मोड्युल भनिन्छ। जब तपाइँ प्रकार्य कोड लेख्नको लागि नयाँ मोड्युल थप्नुहुन्छ, एक मोड्युल फोल्डर स्वचालित रूपमा सिर्जना हुन्छ जसमा सबै मोड्युलहरू लेखिन्छन्।

    तर कहिलेकाहीँ यस्तो हुन्छ कि नयाँ मोड्युल छैन। सिर्जना हुँदैछ। अर्को स्क्रिनसटमा तपाईले कस्टम प्रकार्य कोड "Microsoft Excel Objects" मोड्युलमा रहेको देख्न सक्नुहुन्छ।यो कार्यपुस्तिका।

    बिन्दु यो हो कि तपाइँ कार्यपत्र वा कार्यपुस्तिकाको कोड क्षेत्रमा अनुकूलन प्रकार्य राख्न सक्नुहुन्न। यस अवस्थामा, प्रकार्यले काम गर्दैन। यसबाहेक, यो प्रकार्यहरूको ड्रपडाउन सूचीमा देखा पर्दैन। त्यसैले, कोड सधैं फोल्डर मोड्युल मा हुनुपर्छ।

    एक्सेल अनुकूलन प्रकार्य मद्दत पाठ प्रदर्शित हुँदैन

    अर्को समस्या हुन सक्छ तपाईंले टाँस्दा देख्नुभएको संकेत हो। अनुकूलन प्रकार्य। यदि तपाइँ एक मानक प्रकार्य प्रयोग गर्नुहुन्छ भने, तपाइँ सधैं प्रकार्य र यसको तर्कहरूको लागि एक टुलटिप देख्नुहुनेछ। तर UDF हरूको बारेमा के हो?

    यदि तपाईंसँग धेरै अनुकूलन प्रकार्यहरू छन् भने, तिनीहरूमध्ये प्रत्येकले के गणना गर्दछ भनेर सम्झन तपाईंलाई अत्यन्तै गाह्रो हुनेछ। कुन तर्कहरू प्रयोग गर्ने भनेर सम्झन अझ गाह्रो हुनेछ। मलाई लाग्छ कि यो एक रिमाइन्डरको रूपमा तपाइँको अनुकूलन प्रकार्यहरूको विवरण हुनु राम्रो विचार हुनेछ।

    यसको लागि, म Application.MacroOptions विधि प्रयोग गर्न सुझाव दिन्छु। यसले तपाईंलाई फंक्शन विजार्ड सञ्झ्यालमा फंक्शन मात्र होइन यसको प्रत्येक आर्गुमेन्टको विवरण देखाउन मद्दत गर्नेछ। तपाईंले सूत्र पट्टीमा रहेको Fx बटन क्लिक गर्दा तपाईंले यो विन्डो देख्नुहुन्छ।

    तपाईंको UDF मा यस्तो सङ्केत कसरी थप्ने भनेर हेरौं। अघिल्लो लेखमा हामीले GetMaxBetween अनुकूलन प्रकार्यमा हेर्यौं। यसले निर्दिष्ट दायरामा अधिकतम संख्या फेला पार्छ र तीन तर्कहरू लिन्छ: संख्यात्मक मानहरूको दायरा, र अधिकतम र न्यूनतम मानखोज्नुहोस्।

    अब हामी यो अनुकूलन प्रकार्यको लागि विवरण थप्नेछौं। यो गर्नका लागि, Application.MacroOptions आदेश सिर्जना गरी चलाउनुहोस्। GetMaxBetween प्रकार्यको लागि, तपाईँले निम्न आदेश चलाउन सक्नुहुन्छ:

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

    वा

    उप दर्ता UDF () अनुप्रयोग।MacroOptions म्याक्रो: = "GetMaxBetween" , _ विवरण: = "निर्दिष्ट दायरामा अधिकतम संख्या" , _ श्रेणी: = "मेरो अनुकूलन कार्यहरू" , _ तर्क विवरणहरू: = एरे (_ "संख्यात्मक मानहरूको दायरा" , _ "तल्लो अन्तराल बोर der" , _ "माथिल्लो अन्तराल किनारा" ) End Sub

    Variable str FuncName प्रकार्यको नाम हो। strDescr - प्रकार्य विवरण। strArgs चरहरूले प्रत्येक तर्कको लागि संकेतहरू समावेश गर्दछ।

    तपाईलाई चौथो तर्क के हो भनेर अचम्म लाग्न सक्छ।अनुप्रयोग।MacroOptions। यो ऐच्छिक तर्कलाई श्रेणी नाम दिइएको छ र यसले हाम्रो अनुकूलन GetMaxBetween () प्रकार्यमा राखिने एक्सेल प्रकार्यहरूको वर्गलाई संकेत गर्दछ। तपाइँ यसलाई कुनै पनि अवस्थित कोटीहरू पछि नाम दिन सक्नुहुन्छ: गणित र ; Trig, सांख्यिकीय, तार्किक, इत्यादि। तपाईंले नयाँ कोटीको लागि नाम निर्दिष्ट गर्न सक्नुहुन्छ जसमा तपाईंले सिर्जना गर्ने कार्यहरू राख्नुहुनेछ। यदि तपाईंले श्रेणी तर्क प्रयोग गर्नुभएन भने, अनुकूलन प्रकार्य स्वतः "प्रयोगकर्ता परिभाषित" वर्गमा राखिनेछ।

    मोड्युल विन्डोमा प्रकार्य कोड टाँस्नुहोस्:

    त्यसपछि "रन" बटनमा क्लिक गर्नुहोस्। आदेशले तपाईँको GetMaxBetween() प्रकार्यको साथ Fx बटन प्रयोग गर्नका लागि सबै सेटिङहरू प्रदर्शन गर्नेछ।

    यदि तपाईँले प्रयोग गरी कक्षमा प्रकार्य घुसाउने प्रयास गर्नुहुन्छ भने Insert function उपकरण, तपाईंले देख्नुहुनेछ कि त्यहाँ तपाईंको GetMaxBetween प्रकार्य "My Custom Functions" श्रेणीमा छ:

    तपाईं केवल सेलमा प्रकार्य नाम टाइप गर्न सुरु गर्न सक्नुहुन्छ र तपाईंले चयन गर्न कार्यहरूको ड्रपडाउन सूचीमा आफ्नो अनुकूलन प्रकार्य देख्नुहुनेछ।

    त्यसपछि प्रकार्य विजार्डलाई कल गर्नुहोस्। Fx बटनसँग।

    टिप। तपाईं प्रकार्य विजार्ड खोल्नको लागि कुञ्जी संयोजन CRTL + A प्रयोग गर्न सक्नुहुन्छ।

    फंक्शन विजार्ड विन्डोमा तपाईंले आफ्नो प्रकार्यको विवरण, साथै पहिलो तर्कको लागि संकेत देख्नुहुनेछ। यदि तपाइँ आफ्नो कर्सर माथि राख्नुहुन्छदोस्रो वा तेस्रो तर्क, तपाईंले तिनीहरूका लागि संकेतहरू पनि देख्नुहुनेछ।

    यदि तपाईं यी संकेतहरूको पाठ परिवर्तन गर्न चाहनुहुन्छ भने, strDescr strArgs<को मानहरू परिवर्तन गर्नुहोस्। 7> RegisterUDF () कोडमा चरहरू। त्यसपछि RegisterUDF () कमाण्ड फेरि चलाउनुहोस्।

    यदि तपाइँ बनाइएका सबै सेटिङहरू अनडू गर्न चाहनुहुन्छ र प्रकार्य विवरण खाली गर्न चाहनुहुन्छ भने, यो कोड चलाउनुहोस्:

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

    तपाईँले आफू अनुकूल प्रकार्य प्रविष्ट गर्दा संकेत प्राप्त गर्ने अर्को तरिका छ। प्रकार्यको नाम प्रविष्ट गर्नुहोस् र त्यसपछि Ctrl + Shift + A थिच्नुहोस् :

    =GetMaxBetween( + Ctrl + Shift + A

    तपाईँले सबै प्रकार्यका तर्कहरूको सूची देख्नुहुनेछ:

    <०>१५>१> तर यदि तर्कका नामहरू धेरै जानकारीपूर्ण छन्, त्यसैले तिनीहरू पनि उपयोगी हुन सक्छन्। अझै, यो केहि भन्दा राम्रो छ :)

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

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

    माइकल ब्राउन सफ्टवेयर उपकरणहरू प्रयोग गरेर जटिल प्रक्रियाहरू सरल बनाउने जोशका साथ एक समर्पित टेक्नोलोजी उत्साही हो। प्राविधिक उद्योगमा एक दशक भन्दा बढी अनुभवको साथ, उनले Microsoft Excel र Outlook, साथै Google Sheets र Docs मा आफ्नो सीपलाई सम्मान गरेका छन्। माइकलको ब्लग आफ्नो ज्ञान र विशेषज्ञता अरूसँग साझेदारी गर्न समर्पित छ, उत्पादकता र दक्षता सुधार गर्न सजिलो-पछ्याउन-सजिलो सुझावहरू र ट्यूटोरियलहरू प्रदान गर्न। चाहे तपाईं अनुभवी पेशेवर होस् वा शुरुवातकर्ता होस्, माइकलको ब्लगले यी आवश्यक सफ्टवेयर उपकरणहरूबाट अधिकतम लाभ लिनको लागि बहुमूल्य अन्तर्दृष्टि र व्यावहारिक सल्लाह प्रदान गर्दछ।