VBA बायरफ तर्क प्रकार बेमेल त्रुटि - शीर्ष 3 कारण और त्रुटि सुधार

एक्सेल VBA में ByRef Argument Type Mismatch

इस लेख में, हम एक्सेल VBA बायरफ को "आर्ग्युमेंट टाइप मिसमैच एरर" के रूप में उपयोग करते समय सामने आई त्रुटि की व्याख्या करते हैं। इससे पहले, मैं आपको पहले "रेफरी" से मिलवा दूं। चर किसी भी प्रोग्रामिंग भाषा के लिए महत्वपूर्ण हैं, और VBA भी अलग नहीं है। हमने चर को घोषित करने के कई तरीके देखे हैं, चर को घोषित करने का एक ऐसा तरीका है "बाय रीफ" और "बायवाल" शब्दों का उपयोग करना।

क्या मतलब है ByRef?

"बायरफ" का अर्थ है "संदर्भ द्वारा", इस शब्द का उपयोग करके, हम वास्तव में संदर्भ द्वारा प्रक्रियाओं (उप और फ़ंक्शन दोनों के लिए) के लिए तर्क पारित कर सकते हैं। यह अपने भाई "बाय वैल" के विपरीत है, जो लचीला नहीं है लेकिन प्रकृति में तय है।

इसे समझने के लिए, नीचे दो मैक्रोज़ पर एक नज़र डालते हैं।

कोड:

सब मैक्रो 1 () डिम ए ऐज़ लॉन्ग ए = ५० मैक्रों २ ए मिसगबॉक्स ए एंड सब सब मैक्रो २ (बाइफ्र ए ए लॉन्ग) ए = ए * १० एंड सब

हमारे यहाँ क्रमशः दो Macro1 और Macro2 नाम के दो उपप्रक्रम हैं। इसे बेहतर समझने के लिए, F8 कुंजी दबाकर मैक्रो लाइन को लाइन से चलाएं।

चर "A" के मान को 50 के रूप में पकड़ने के लिए F8 कुंजी दबाएँ।

कोड की अगली पंक्ति "मैक्रो 2 ए" कहती है, अर्थात, दूसरे मैक्रो और "ए" का नाम "बाय रिफ" शब्द के माध्यम से परिभाषित चर है।

जैसा कि आप ऊपर देख सकते हैं, जिस क्षण हम कोड "मैक्रो 2 ए" को निष्पादित करते हैं, यह उपरोक्त प्रक्रिया से अगले VBA उप प्रक्रिया में कूद गया है।

अब हम चर "A" का मान 50 देख सकते हैं। ऐसा इसलिए है क्योंकि हमने चर "A" को घोषित करने के लिए "ByRef" शब्द का उपयोग किया है, जो कि Macro1 की तरह ही है , इसने हमारे द्वारा लिए गए मूल्य को पकड़ लिया है। मैक्रो 1 से इस चर "ए" को सौंपा

अब इस मैक्रो ( Macro2 ) समीकरण में A = A * 10 अर्थात A = 50 * 100 लिखा है । उपरोक्त मैक्रो ( Macro1 ) पर वापस जाने के लिए F8 कुंजी को 3 बार दबाएँ ।

अब VBA में संदेश बॉक्स में चर "A" का मान देखने के लिए एक बार और F8 कुंजी दबाएं।

मान 500 कहता है।

भले ही इस मैक्रो (Macro1) में हमने जो मान दिया है, वह 50 है, ByRef शब्द का उपयोग करके, हमने वास्तव में Macro1 से चर "A" के मान को बनाए रखते हुए Macro2 उपप्रकार को ट्रिगर किया और फिर A के मान को 10 से गुणा करके निष्पादित किया।

VBA ब्यूरी आर्गमेंट प्रकार बेमेल के लिए शीर्ष 3 कारण

ऊपर, हमने देखा है कि "ByRef" कैसे काम करता है, लेकिन हम कुछ गलतियों को करने के लिए बाध्य होते हैं, जिसके परिणामस्वरूप VBA त्रुटि संदेश को "ByRef Argument Type Mismatch" के रूप में फेंक दिया जाता है।

यह कई कारणों से है, और इस अनुभाग में, हम आपको दिखाएंगे कि इस त्रुटि को कैसे ठीक किया जाए और कोड को डीबग करें।

त्रुटि कारण # 1 - विभिन्न प्रकार के नाम

एक्सेल VBA में यह त्रुटि होने के पीछे एक मुख्य कारण दो प्रक्रियाओं में पारित विभिन्न चर के कारण है। उदाहरण के लिए, नीचे दिए गए कोड देखें।

कोड:

सब मैक्रो 1 () डिम ए ऐज़ लॉन्ग ए = ५० मैक्रों २ बी मिसगॉक्स ए एंड सब सब मैक्रो २ (बाइ आर ए लॉन्ग) बी = बी * १० एंड सब

Macro1 में, हमने "A" वेरिएबल का उपयोग किया है, और Macro2 में, हमने "B" वेरिएबल का उपयोग किया है। अब, यदि आप कोड को चलाने का प्रयास करते हैं, तो हमें VBA त्रुटि "ByRef Argument Type Mismatch" के रूप में मिलेगी।

जैसा कि आप ऊपर देख सकते हैं, चर "बी" पर प्रकाश डाला गया है क्योंकि चर नाम का प्रकार एक बेमेल है।

समाधान: इस समस्या को दूर करने के लिए, हमें यह सुनिश्चित करने की आवश्यकता है कि दोनों प्रक्रियाओं में चर नाम सटीक हैं।

त्रुटि कारण 2: विभिन्न परिवर्तनीय डेटा प्रकार

भले ही परिवर्तनीय नाम समान हों, फिर भी यह एक त्रुटि का कारण बनता है, इसका कारण यह है कि डेटा प्रकार हम उन्हें प्रदान करते हैं। नीचे दिए गए कोड को देखें।

कोड:

सब मैक्रो 1 () डिगर ए एज़ इंटर्जर ए = ५० मैक्रो २ ए मिसगबॉक्स ए एंड सब सब मैक्रो २ (बाइफ्र ए ए लॉन्ग) ए = ए * १० एंड सब

उपरोक्त कोडों में, मैंने Macro1 में "A" को पूर्णांक डेटा प्रकार के रूप में घोषित किया है, और Macro2 में उसी चर को "लंबा" के रूप में डेटा प्रकार सौंपा गया था।

जब हम इस कोड को चलाते हैं, तो यह VBA त्रुटि "ByRef तर्क प्रकार बेमेल" का कारण होगा।

ऐसा इसलिए है क्योंकि हमने एक ही चर नाम के लिए दो अलग-अलग डेटा प्रकार निर्दिष्ट किए हैं।

समाधान: डेटा प्रक्रिया दोनों प्रक्रियाओं में समान होनी चाहिए।

त्रुटि कारण 3: चर डेटा प्रकार एक मैक्रो में गुम है

एक्सेल VBA त्रुटि, "ByRef Argument Type Mismatch," एक मैक्रो में असाइन किए गए डेटा प्रकार और किसी अन्य मैक्रो में असाइन नहीं किए जाने के कारण हो सकता है।

कोड:

सब मैक्रो 1 () ए = 50 मैक्रो 2 ए मिसगबॉक्स ए एंड सब सब मैक्रो 2 (बायफ्र ए ए लॉन्ग) ए = ए * 10 एंड सब

Macro1 के उपरोक्त कोड में, मैंने किसी चर को घोषित नहीं किया है, बल्कि केवल चर को मान दिया है।

दूसरी ओर, मैक्रो 2 के लिए, मैंने चर "ए" को लंबे समय तक घोषित किया है। यदि आप इस कोड को चलाने का प्रयास करते हैं, तो यह "ByRef तर्क प्रकार बेमेल" VBA त्रुटि का कारण होगा।

Solution1: इस प्रकार की स्थितियों से बचने के लिए, पहला उपाय यह है कि दोनों प्रक्रियाओं में परिवर्तनशील घोषित किया जाए और एक ही डेटा प्रकार निर्दिष्ट किया जाए।

Solution2: एक वैकल्पिक समाधान मॉड्यूल के शीर्ष पर "विकल्प स्पष्ट" शब्द जोड़कर परिवर्तनीय घोषणा को अनिवार्य बनाना है।

यह क्या करेगा कि इससे पहले कि यह VBA "ByRef Argument Type Mismatch," त्रुटि दिखाता है, यह वास्तव में हमें पहले चर घोषित करने के लिए कहता है।

तो, विकल्प स्पष्ट हमेशा VBA में काम में आता है।

याद रखने वाली चीज़ें

  • ByRef, By Val के विपरीत है।
  • बायरफ संदर्भ को एक प्रक्रिया से दूसरी प्रक्रिया में ले जाता है।
  • चर नाम, डेटा प्रकार दोनों प्रक्रियाओं में समान होना चाहिए।
  • प्रत्येक चर को कई चर के मामले में अलग से घोषित करने की आवश्यकता होती है।

दिलचस्प लेख...