यह ट्यूटोरियल VBA ऑन एरर रिज्यूमे नेक्स्ट और गोटो स्टेटमेंट की व्याख्या करेगा।
यहां तक कि जब आपका कोड पूरी तरह से निर्मित होता है, तब भी उपयोगकर्ता वह नहीं कर सकता जैसा आप उम्मीद करेंगे। इस कारण से जब भी कोई कारण हो कि कोई त्रुटि हो सकती है तो आपको अपने कोड में त्रुटि हैंडलर डालने की आवश्यकता है।
त्रुटि पर फिर से शुरू करें अगला
ऑन एरर रिज्यूम नेक्स्ट स्टेटमेंट VBA को त्रुटियों वाले कोड की किसी भी लाइन को छोड़ने और अगली लाइन पर जाने के लिए कहता है। VBA त्रुटि वाली रेखा या रेखाओं को अनदेखा कर देगा, और कोड की अगली पंक्ति पर चला जाएगा।
यह तब उपयोगी होता है जब कोड की पंक्ति जिसे अनदेखा किया जा सकता है मैक्रो के सफल संचालन के लिए महत्वपूर्ण नहीं है, लेकिन गलत तरीके से उपयोग किए जाने पर यह काफी खतरनाक हो सकता है क्योंकि यह अनजाने में परिणाम दे सकता है।
उदाहरण के लिए, नीचे दी गई प्रक्रिया में:
123456 | सब हाइडऑलशीट्स ()वर्कशीट के रूप में डिम WSActiveWorkbook.Sheets में प्रत्येक ws के लिएws.दृश्यमान = असत्यअगला wsअंत उप |
यदि हम इस कोड को चलाते हैं, तो हमें एक त्रुटि मिलेगी क्योंकि हम किसी कार्यपुस्तिका में सभी कार्यपत्रकों को छिपा नहीं सकते - कम से कम एक कार्यपुस्तिका दिखाई देनी चाहिए।
हालाँकि, यदि हम नीचे दिखाए गए अनुसार प्रक्रिया में संशोधन करते हैं, तो कोड त्रुटि के बाद भी जारी रहेगा और कार्यपुस्तिका में अंतिम शीट को दृश्यमान छोड़ देगा।
1234567 | सब हाइडऑलशीट्स ()त्रुटि पर फिर से शुरू करें अगलावर्कशीट के रूप में डिम WSActiveWorkbook.Sheets में प्रत्येक ws के लिएws.दृश्यमान = असत्यअगला wsअंत उप |
त्रुटि गोटो 0 . पर
अगर हमारे कोड में एरर हैंडलर नहीं है, त्रुटि गोटो 0 . पर एक्सेल की डिफ़ॉल्ट सेटिंग है। इसका मूल रूप से मतलब है कि जब कोई त्रुटि होती है त्रुटि गोटो 0 . पर, VBA कोड निष्पादित करना बंद कर देगा और इसका मानक त्रुटि संदेश बॉक्स प्रदर्शित करेगा, उदाहरण के लिए:
अगर हमने कोई एरर ट्रैप लगाया है जैसे त्रुटि पर फिर से शुरू करें अगला हमारे कोड में, लेकिन फिर हम त्रुटि को डिफ़ॉल्ट पर फिर से सेट करना चाहते हैं, हम एक डाल सकते हैं त्रुटि गोटो 0 . पर हमारे कोड में लाइन।
12345678910 | उप ErrorGoTo0 ()त्रुटि पर फिर से शुरू करें अगलावर्कशीट के रूप में डिम WSActiveWorkbook.Sheets में प्रत्येक ws के लिएws.दृश्यमान = असत्यअगला wsत्रुटि गोटो 0 . परउदाहरण के लिए यहां अधिक कोड चलाएँ:ActiveSheet.Name = "शीट1"अंत उप |
अब अगर के बाद हमारे कोड में कोई त्रुटि होनी है त्रुटि गोटो 0 . पर रेखा, एक्सेल के लिए डिफ़ॉल्ट त्रुटि संदेश होगा। इस उदाहरण में, हमारे पास पहले से ही ActiveWorkbook में शीट1 नाम की एक शीट है, जो ऊपर दिए गए कोड के रूप में है त्रुटि गोटो 0 . पर शीट छुपाता है, लेकिन उसे हटाता नहीं है। डिफ़ॉल्ट एक्सेल त्रुटि संदेश यह दर्शाता है कि शीट का नाम पहले ही लिया जा चुका है, तब दिखाएगा।
त्रुटि गोटो टू . पर रेखा
हम अपने कोड को का उपयोग करके कोड की एक अलग पंक्ति में जाने के लिए बाध्य कर सकते हैं त्रुटि गोटो पर रेखा जो त्रुटि होने पर VBA को कोड की एक विशिष्ट पंक्ति पर जाने के लिए कहता है।
123456789101112 | उप ErrorGoToLine ()त्रुटि पर फिर से शुरू करें अगलावर्कशीट के रूप में डिम WSActiveWorkbook.Sheets में प्रत्येक ws के लिएws.दृश्यमान = असत्यअगला wsत्रुटि GoTo त्रुटिकर्ता परActiveSheet.Name = "शीट1"उप से बाहर निकलेंअपराधी:MsgBox ("पहले से ही एक शीट है जिसे शीट 1 कहा जाता है!", vbक्रिटिकल)अंत उप |
उपरोक्त उदाहरण में, जब कोड "शीट 1" शीट पाता है, तो यह त्रुटि हैंडलर लेबल के नीचे कोड की पंक्ति में चला जाता है - इस मामले में यह एक कस्टम संदेश बॉक्स को कॉल करता है जो उपयोगकर्ताओं को सूचित करता है कि शीट पहले ही बाहर निकल चुकी है। त्रुटि हैंडलर लेबल के बाद VBA दिखाने के लिए एक कोलन होना चाहिए कि यह एक लेबल है।
1 | अपराधी: |
कोड तब लेबल के नीचे की रेखा पर कूद जाएगा और कस्टम संदेश बॉक्स लौटाएगा।
यह तब उपयोगी होता है जब आप नहीं चाहते कि आपका उपयोगकर्ता आपके कोड में जाने के लिए डीबग पर क्लिक कर सके क्योंकि मानक एक्सेल संदेश हमेशा कोड को डीबग करने का विकल्प देता है।
हमें भी चाहिए उप से बाहर निकलें प्रक्रिया में। अगर वहाँ है नहीं शीट 1 नामक एक शीट, फिर कोड की वह पंक्ति चलेगी और सक्रिय शीट का नाम बदलकर शीट 1 कर देगी। फिर हम चाहते हैं कि कोड समाप्त हो जाए - हम नहीं चाहते कि यह एरर हैंडलर पर चले और संदेश बॉक्स दिखाए। Exit Sub लाइन तब प्रक्रिया से बाहर निकलती है और कोड को रोक देती है।