VBA - प्रकार बेमेल (रन-टाइम त्रुटि 13)

टाइप मिसमैच एरर क्या है?

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

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

एक प्रकार की बेमेल त्रुटि होती है क्योंकि आपने एक निश्चित प्रकार के रूप में डिम स्टेटमेंट का उपयोग करके एक चर को परिभाषित किया है उदा। पूर्णांक, दिनांक, और आपका कोड चर के लिए एक मान निर्दिष्ट करने का प्रयास कर रहा है जो स्वीकार्य नहीं है उदा। इस उदाहरण में एक पूर्णांक चर को निर्दिष्ट पाठ स्ट्रिंग:

यहाँ एक उदाहरण है:

डीबग पर क्लिक करें और कोड की आपत्तिजनक लाइन पीले रंग में हाइलाइट हो जाएगी। जारी रखने के लिए त्रुटि पॉप-अप पर कोई विकल्प नहीं है, क्योंकि यह एक बड़ी त्रुटि है और कोड को आगे चलाने का कोई तरीका नहीं है।

इस विशेष मामले में, समाधान मंद कथन को एक चर प्रकार में बदलना है जो उस मान के साथ काम करता है जिसे आप चर को निर्दिष्ट कर रहे हैं। यदि आप चर प्रकार को 'स्ट्रिंग' में बदलते हैं तो कोड काम करेगा, और आप शायद चर नाम भी बदलना चाहेंगे।

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

वर्कशीट परिकलन के कारण हुई बेमेल त्रुटि

ऊपर दिया गया उदाहरण बहुत ही सरल है कि कैसे एक बेमेल त्रुटि उत्पन्न की जा सकती है और इस मामले में, इसे आसानी से ठीक किया जा सकता है

हालांकि, बेमेल त्रुटियों का कारण आमतौर पर इससे कहीं अधिक गहरा होता है, और जब आप अपने कोड को डीबग करने का प्रयास कर रहे होते हैं तो यह इतना स्पष्ट नहीं होता है।

एक उदाहरण के रूप में, मान लीजिए कि आपने वर्कशीट पर एक निश्चित स्थिति में एक मान लेने के लिए कोड लिखा है और इसमें कार्यपुस्तिका के भीतर गणना पर निर्भर अन्य सेल शामिल हैं (इस उदाहरण में बी 1)

कार्यपत्रक इस उदाहरण की तरह दिखता है, पाठ की एक स्ट्रिंग के भीतर किसी विशेष वर्ण को खोजने के लिए सूत्र के साथ

उपयोगकर्ता के दृष्टिकोण से, सेल A1 मुक्त प्रारूप है और वे कोई भी मान दर्ज कर सकते हैं जो वे चाहते हैं। हालांकि, सूत्र 'बी' वर्ण की घटना की तलाश में है, और इस मामले में यह नहीं मिला है इसलिए सेल बी 1 में त्रुटि मान है।

नीचे दिया गया परीक्षण कोड एक बेमेल त्रुटि उत्पन्न करेगा क्योंकि सेल A1 में गलत मान दर्ज किया गया है

1234 सब टेस्ट मिसमैच ()डिम माईनंबर अस इंटीजरMyNumber = शीट्स ("शीट 1")। रेंज ("बी 1")। मानअंत उप

सेल B1 में मान ने एक त्रुटि उत्पन्न की है क्योंकि उपयोगकर्ता ने सेल A1 में टेक्स्ट दर्ज किया है जो अपेक्षित के अनुरूप नहीं है और इसमें 'B' वर्ण नहीं है।

कोड वेरिएबल 'MyNumber' को मान निर्दिष्ट करने का प्रयास करता है जिसे एक पूर्णांक की अपेक्षा करने के लिए परिभाषित किया गया है, और इसलिए आपको एक बेमेल त्रुटि मिलती है।

यह इन उदाहरणों में से एक है जहां सावधानीपूर्वक आपके कोड की जांच करने से उत्तर नहीं मिलेगा। ऐसा क्यों हो रहा है, यह जानने के लिए आपको उस वर्कशीट को भी देखना होगा जहां से मूल्य आ रहा है।

समस्या वास्तव में कार्यपत्रक पर है, और B1 में सूत्र को बदलने की आवश्यकता है ताकि त्रुटि मानों से निपटा जा सके। यदि खोज वर्ण नहीं मिलता है तो आप 0 का डिफ़ॉल्ट मान प्रदान करने के लिए 'IFERROR' सूत्र का उपयोग करके ऐसा कर सकते हैं

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

12345678 सब टेस्ट मिसमैच ()डिम माईनंबर अस इंटीजरMyNumber = शीट्स ("शीट 1")। रेंज ("बी 1")। टेक्स्टयदि MyNumber = 0 तोMsgBox "सेल A1 पर मान अमान्य है", vbcriticalउप से बाहर निकलेंअगर अंतअंत उप

आप स्प्रैडशीट पर डेटा सत्यापन (रिबन के डेटा टैब पर डेटा उपकरण समूह) का भी उपयोग कर सकते हैं ताकि उपयोगकर्ता जो कुछ भी पसंद करता है उसे करने से रोक सके और वर्कशीट त्रुटियों को पहले स्थान पर ले जा सके। उन्हें केवल वे मान दर्ज करने की अनुमति दें जो कार्यपत्रक त्रुटियों का कारण नहीं बनेंगे।

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

साथ ही लॉक और पासवर्ड वर्कशीट की सुरक्षा करते हैं, ताकि अमान्य डेटा दर्ज नहीं किया जा सके

दर्ज सेल मानों के कारण बेमेल त्रुटि

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

नीचे दिया गया उदाहरण कोड पूर्णांक मानों के साथ परिभाषित 'MyNumber' नामक एक साधारण सरणी बनाता है

कोड तब A1 से A7 तक की कोशिकाओं की एक श्रृंखला के माध्यम से पुनरावृति करता है, सेल मानों को सरणी में निर्दिष्ट करता है, प्रत्येक मान को अनुक्रमित करने के लिए एक चर 'गणना' का उपयोग करता है

जब कोड टेक्स्ट वैल्यू तक पहुंचता है, तो इसके कारण एक बेमेल त्रुटि होती है और सब कुछ रुक जाता है

एरर पॉप-अप में 'डीबग' पर क्लिक करने पर, आपको कोड की लाइन दिखाई देगी जिसमें समस्या पीले रंग में हाइलाइट की गई है। कोड के भीतर वेरिएबल 'काउन' के किसी भी उदाहरण पर अपना कर्सर मँडराकर, आप 'काउन' का मान देख पाएंगे जहाँ कोड विफल हो गया है, जो इस मामले में 5 है

कार्यपत्रक को देखने पर आप देखेंगे कि 5वां सेल डाउन में टेक्स्ट वैल्यू है और इससे कोड विफल हो गया है

आप अपने कोड को ऐसी स्थिति में डालकर बदल सकते हैं जो सेल मान को सरणी में जोड़ने से पहले एक संख्यात्मक मान की जांच करता है

12345678910111213 सब टेस्ट मिसमैच ()Dim MyNumber(10) Integer as Integer, Coun as Integerकाउंट = 1करनायदि काउंट = 11 तो बाहर निकलें Doअगर IsNumeric(Sheets("sheet1"). Cells(Coun, 1).Value) तोMyNumber(Coun) = Sheets("sheet1"). Cells(Coun, 1).Valueअन्यथाMyNumber(Coun) = 0अगर अंतकाउंट = काउंट + १कुंडलीअंत उप

कोड 'IsNumeric' फ़ंक्शन का उपयोग यह जांचने के लिए करता है कि क्या मान वास्तव में एक संख्या है, और यदि यह है तो यह इसे सरणी में दर्ज करता है। यदि यह संख्या नहीं है तो यह शून्य के मान में प्रवेश करता है।

यह सुनिश्चित करता है कि ऐरे इंडेक्स को स्प्रेडशीट में सेल रो नंबरों के अनुरूप रखा गया है।

आप उस कोड को भी जोड़ सकते हैं जो मूल त्रुटि मान और स्थान विवरण को 'त्रुटियों' वर्कशीट में कॉपी करता है ताकि उपयोगकर्ता यह देख सके कि आपका कोड चलाते समय उन्होंने क्या गलत किया है।

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

आपको कार्यपत्रक पर डेटा सत्यापन और कार्यपत्रक की सुरक्षा के लिए पासवर्ड की भी आवश्यकता है। यह उपयोगकर्ता को पंक्तियों को सम्मिलित करने और अनपेक्षित डेटा दर्ज करने से रोकेगा।

पैरामीटर का उपयोग करके किसी फ़ंक्शन या सब रूटीन को कॉल करने के कारण बेमेल त्रुटि

जब कोई फ़ंक्शन कहा जाता है, तो आप आमतौर पर फ़ंक्शन द्वारा पहले से परिभाषित डेटा प्रकारों का उपयोग करके फ़ंक्शन को पैरामीटर पास करते हैं। फ़ंक्शन VBA में पहले से ही परिभाषित एक हो सकता है, या यह एक उपयोगकर्ता परिभाषित फ़ंक्शन हो सकता है जिसे आपने स्वयं बनाया है। एक उप-दिनचर्या को भी कभी-कभी मापदंडों की आवश्यकता हो सकती है

यदि आप इस परंपरा से नहीं चिपके रहते हैं कि फ़ंक्शन में पैरामीटर कैसे पास किए जाते हैं, तो आपको एक बेमेल त्रुटि मिलेगी

12345678 उप कॉलफंक्शन ()पूर्णांक के रूप में मंद रिटरिट = माईफंक्शन (3, "टेस्ट")अंत उपफ़ंक्शन MyFunction (एन के रूप में पूर्णांक, टी के रूप में स्ट्रिंग) स्ट्रिंग के रूप मेंमाई फंक्शन = टीअंत समारोह

बेमेल त्रुटि प्राप्त करने के लिए यहां कई संभावनाएं हैं

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

यदि आप पारित होने वाले पहले पैरामीटर (3) के आसपास उद्धरण चिह्न लगाते हैं, तो इसे एक स्ट्रिंग के रूप में व्याख्यायित किया जाता है, जो फ़ंक्शन (पूर्णांक) में पहले पैरामीटर की परिभाषा से मेल नहीं खाता है।

यदि आप फ़ंक्शन कॉल में दूसरा पैरामीटर एक संख्यात्मक मान में बनाते हैं, तो यह एक बेमेल के साथ विफल हो जाएगा क्योंकि स्ट्रिंग में दूसरा पैरामीटर एक स्ट्रिंग (पाठ) के रूप में परिभाषित किया गया है।

गलत तरीके से VBA में कनवर्ज़न फ़ंक्शंस का उपयोग करने के कारण हुई बेमेल त्रुटि

ऐसे कई रूपांतरण कार्य हैं जिनका उपयोग आप VBA में विभिन्न डेटा प्रकारों में मानों को परिवर्तित करने के लिए कर सकते हैं। एक उदाहरण 'CInt' है जो एक संख्या वाली स्ट्रिंग को एक पूर्णांक मान में परिवर्तित करता है।

यदि परिवर्तित की जाने वाली स्ट्रिंग में कोई अल्फा वर्ण हैं तो आपको एक बेमेल त्रुटि मिलेगी, भले ही स्ट्रिंग के पहले भाग में संख्यात्मक वर्ण हों और शेष अल्फा वर्ण हों। '123abc'

बेमेल त्रुटियों की सामान्य रोकथाम

हमने उपरोक्त उदाहरणों में आपके कोड में संभावित बेमेल त्रुटियों से निपटने के कई तरीकों को देखा है, लेकिन कई अन्य तरीके हैं, हालांकि वे सबसे अच्छे विकल्प नहीं हो सकते हैं:

अपने चरों को भिन्न प्रकार के रूप में परिभाषित करें

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

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

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

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

भिन्न प्रकार का उपयोग करना मैला प्रोग्रामिंग माना जाता है, जब तक कि इसके लिए कोई परम आवश्यकता न हो।

त्रुटियों को संभालने के लिए ऑनरर कमांड का प्रयोग करें

एरर ट्रैपिंग से निपटने के लिए OnError कमांड को आपके कोड में शामिल किया जा सकता है, ताकि यदि कभी कोई त्रुटि हो तो उपयोगकर्ता को मानक VBA त्रुटि पॉप-अप के बजाय एक सार्थक संदेश दिखाई दे

1234567 उप एररट्रैप ()डिम माईनंबर अस इंटीजरत्रुटि पर GoTo Err_HandlerMyNumber = "परीक्षण"Err_Handler:MsgBox "त्रुटि" और त्रुटि। विवरण और "हो गया"अंत उप

यह प्रभावी रूप से त्रुटि को आपके कोड के सुचारू रूप से चलने से रोकता है और उपयोगकर्ता को त्रुटि स्थिति से सफाई से उबरने की अनुमति देता है।

Err_Handler रूटीन त्रुटि के बारे में अधिक जानकारी दिखा सकता है और इसके बारे में किससे संपर्क करना है।

प्रोग्रामिंग के दृष्टिकोण से, जब आप एरर हैंडलिंग रूटीन का उपयोग कर रहे होते हैं, तो उस कोड की लाइन का पता लगाना काफी मुश्किल होता है जिस पर त्रुटि है। यदि आप F8 का उपयोग करके कोड के माध्यम से आगे बढ़ रहे हैं, जैसे ही कोड की आपत्तिजनक लाइन चलती है, यह एरर हैंडलिंग रूटीन में कूद जाता है, और आप यह नहीं जांच सकते कि यह कहां गलत हो रहा है।

इसके इर्द-गिर्द एक वैश्विक स्थिरांक स्थापित करना है जो सही या गलत (बूलियन) है और इसका उपयोग 'इफ' स्टेटमेंट का उपयोग करके एरर हैंडलिंग रूटीन को चालू या बंद करने के लिए करें। जब आप त्रुटि का परीक्षण करना चाहते हैं तो आपको केवल वैश्विक स्थिरांक को गलत पर सेट करना होगा और त्रुटि हैंडलर अब काम नहीं करेगा।

1 ग्लोबल कॉन्स्ट एररहैंडलिंग = गलत
1234567 उप एररट्रैप ()पूर्णांक के रूप में मंद MyNumberअगर ErrHandling = True तो Error GoTo Err_Handler . परMyNumber = "परीक्षण"Err_Handler:MsgBox "त्रुटि" और त्रुटि। विवरण और "हो गया"अंत उप

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

कोशिकाओं की एक श्रृंखला के माध्यम से लूपिंग के पहले के उदाहरण का उपयोग करते हुए, कोड सेल A5 तक पहुंच जाएगा और बेमेल त्रुटि को हिट करेगा। उपयोगकर्ता को त्रुटि के बारे में जानकारी देने वाला एक संदेश बॉक्स दिखाई देगा, लेकिन उस सेल से आगे की सीमा में कुछ भी संसाधित नहीं किया जाएगा।

त्रुटियों को दबाने के लिए ऑनरर कमांड का प्रयोग करें

यह 'ऑन एरर रिज्यूमे नेक्स्ट' कमांड का उपयोग करता है। यह आपके कोड में शामिल करने के लिए बहुत खतरनाक है क्योंकि यह किसी भी बाद की त्रुटियों को दिखाए जाने से रोकता है। इसका मूल रूप से मतलब है कि जैसे ही आपका कोड निष्पादित हो रहा है, यदि कोड की एक पंक्ति में कोई त्रुटि होती है, तो निष्पादन त्रुटि रेखा को निष्पादित किए बिना अगली उपलब्ध पंक्ति में चला जाएगा, और सामान्य रूप से जारी रहेगा।

यह एक संभावित त्रुटि स्थिति को सुलझा सकता है, लेकिन यह अभी भी कोड में हर भविष्य की त्रुटि को प्रभावित करेगा। तब आप सोच सकते हैं कि आपका कोड बग मुक्त है, लेकिन वास्तव में ऐसा नहीं है और आपके कोड के कुछ हिस्से वह नहीं कर रहे हैं जो आपको लगता है कि उसे करना चाहिए।

ऐसी स्थितियाँ हैं जहाँ इस कमांड का उपयोग करना आवश्यक है, जैसे कि यदि आप 'किल' कमांड का उपयोग करके किसी फ़ाइल को हटा रहे हैं (यदि फ़ाइल मौजूद नहीं है, तो एक त्रुटि होगी), लेकिन त्रुटि ट्रैपिंग को हमेशा वापस स्विच किया जाना चाहिए तुरंत बाद जहां संभावित त्रुटि का उपयोग कर हो सकता है:

1 त्रुटि गोटो 0 . पर

कोशिकाओं की एक श्रृंखला के माध्यम से लूपिंग के पहले उदाहरण में, 'ऑन एरर रिज्यूमे नेक्स्ट' का उपयोग करके, यह लूप को जारी रखने में सक्षम करेगा, लेकिन त्रुटि पैदा करने वाले सेल को एरे में स्थानांतरित नहीं किया जाएगा, और उस विशेष इंडेक्स के लिए एरे एलिमेंट एक शून्य मान रखेगा।

घोषणा से मेल खाने के लिए डेटा को डेटा प्रकार में परिवर्तित करना

आप आने वाले डेटा के डेटा प्रकार को बदलने के लिए VBA फ़ंक्शंस का उपयोग कर सकते हैं ताकि यह प्राप्त करने वाले चर के डेटा प्रकार से मेल खाए।

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

इनमें से कई रूपांतरण फ़ंक्शन हैं जिनका उपयोग किया जा सकता है, लेकिन यहां मुख्य हैं:

CInt - एक स्ट्रिंग को एक पूर्णांक मान में परिवर्तित करता है जिसमें एक संख्यात्मक मान (नीचे + या - 32,768) होता है। ध्यान रखें कि यह किसी भी दशमलव बिंदु को काट देता है

CLng - एक बड़े संख्यात्मक मान वाले स्ट्रिंग को एक लंबे पूर्णांक में कनवर्ट करता है। दशमलव बिंदुओं को काट दिया जाता है।

सीडीबीएल - एक फ्लोटिंग दशमलव बिंदु संख्या रखने वाली एक स्ट्रिंग को एक डबल सटीक संख्या में परिवर्तित करता है। दशमलव अंक शामिल हैं

सीडीएटी - उस स्ट्रिंग को कनवर्ट करता है जो दिनांक को दिनांक चर में रखता है। आंशिक रूप से विंडोज कंट्रोल पैनल में सेटिंग्स और आपके लोकेल पर निर्भर करता है कि तारीख की व्याख्या कैसे की जाती है

CStr - एक संख्यात्मक या दिनांक मान को एक स्ट्रिंग में कनवर्ट करता है

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

123 उप परीक्षण ()MsgBox CInt ("123abc")अंत उप

आपके कोड के भीतर परीक्षण चर

किसी विशेष प्रकार के चर को निर्दिष्ट करने से पहले आप यह पता लगाने के लिए एक चर का परीक्षण कर सकते हैं कि यह कौन सा डेटा प्रकार है।

उदाहरण के लिए, आप वीबीए में 'इसन्यूमेरिक' फ़ंक्शन का उपयोग करके यह देखने के लिए एक स्ट्रिंग की जांच कर सकते हैं कि यह संख्यात्मक है या नहीं

1 MsgBox IsNumeric("123test")

यह कोड गलत लौटाएगा क्योंकि हालांकि स्ट्रिंग संख्यात्मक वर्णों से शुरू होती है, इसमें टेक्स्ट भी होता है इसलिए यह परीक्षण में विफल रहता है।

1 MsgBox IsNumeric("123")

यह कोड ट्रू लौटाएगा क्योंकि यह सभी अंकीय वर्ण हैं

विभिन्न डेटा प्रकारों के परीक्षण के लिए VBA में कई कार्य हैं, लेकिन ये मुख्य हैं:

IsNumeric - परीक्षण करता है कि कोई व्यंजक एक संख्या है या नहीं

IsDate - परीक्षण करता है कि कोई व्यंजक दिनांक है या नहीं

IsNull - परीक्षण करता है कि कोई अभिव्यक्ति शून्य है या नहीं। एक शून्य मान केवल एक भिन्न वस्तु में रखा जा सकता है अन्यथा आपको 'अशक्त का अमान्य उपयोग' एक त्रुटि मिलेगी। यदि आप एक प्रश्न पूछने के लिए इसका उपयोग कर रहे हैं तो एक संदेश बॉक्स एक शून्य मान देता है, इसलिए वापसी चर को एक प्रकार होना चाहिए। ध्यान रखें कि शून्य मान का उपयोग करने वाली कोई भी गणना हमेशा शून्य का परिणाम लौटाएगी।

IsArray - परीक्षण करता है कि अभिव्यक्ति एक सरणी का प्रतिनिधित्व करती है या नहीं

IsEmpty - परीक्षण करता है कि अभिव्यक्ति खाली है या नहीं। ध्यान दें कि खाली शून्य के समान नहीं है। एक चर खाली होता है जब इसे पहली बार परिभाषित किया जाता है लेकिन यह शून्य मान नहीं होता है

आश्चर्यजनक रूप से पर्याप्त, IsText या IsString के लिए कोई फ़ंक्शन नहीं है, जो वास्तव में उपयोगी होगा

वस्तुएँ और बेमेल त्रुटियाँ

यदि आप रेंज या शीट जैसी वस्तुओं का उपयोग कर रहे हैं, तो आपको संकलन समय पर एक बेमेल त्रुटि मिलेगी, न कि रन टाइम पर, जो आपको उचित चेतावनी देती है कि आपका कोड काम नहीं करेगा।

123456 उप टेस्टरेंज ()डिम मायरेंज एज़ रेंज, आई एज़ लॉन्गMyRange = Range("A1:A2") सेट करेंमैं = 10एक्स = यूज़माईरेंज (आई)अंत उप
12 फंक्शन यूज़माईरेंज (आर रेंज के रूप में)अंत समारोह

इस कोड में 'UseMyRange' नामक एक फ़ंक्शन होता है और एक पैरामीटर एक रेंज ऑब्जेक्ट के रूप में पारित होता है। हालांकि, पारित किया जा रहा पैरामीटर एक लंबा पूर्णांक है जो डेटा प्रकार से मेल नहीं खाता है।

जब आप वीबीए कोड चलाते हैं, तो इसे तुरंत संकलित किया जाता है, और आपको यह त्रुटि संदेश दिखाई देगा:

आपत्तिजनक पैरामीटर को नीले रंग की पृष्ठभूमि के साथ हाइलाइट किया जाएगा

आम तौर पर, यदि आप ऑब्जेक्ट का उपयोग करके VBA कोड में गलतियाँ करते हैं, तो आपको यह त्रुटि संदेश दिखाई देगा, न कि एक प्रकार का बेमेल संदेश:

आप साइट के विकास में मदद मिलेगी, अपने दोस्तों के साथ साझा करने पेज

wave wave wave wave wave