विज़ुअल बेसिक फॉर एप्लिकेशन (VBA) Microsoft द्वारा विकसित विज़ुअल बेसिक प्रोग्रामिंग भाषा का एक कार्यान्वयन है। VBA का उपयोग UDFs को सक्षम करने, कार्यों को स्वचालित करने और DLL के माध्यम से WinAPI तक पहुँचने के लिए किया जा सकता है। हालांकि, हाल ही में, कई रिपोर्टें आ रही हैं जहां उपयोगकर्ता कुछ कमांड निष्पादित करने में असमर्थ हैं और ऐसा करने का प्रयास करते समय "Subscript Out of Range, Error 9" पॉप अप होता है।
VBA में "सबस्क्रिप्ट आउट ऑफ रेंज" त्रुटि के कारण
कई उपयोगकर्ताओं से कई रिपोर्ट प्राप्त करने के बाद, हमने इस मुद्दे की जांच करने और इसे पूरी तरह से ठीक करने के लिए समाधानों का एक सेट तैयार करने का निर्णय लिया। साथ ही, हम उन कारणों को देखते हैं जिनके कारण यह ट्रिगर होता है और उन्हें नीचे सूचीबद्ध किया है।
- गैर-मौजूद तत्व: कुछ मामलों में, यह संभव है कि आपने कमांड में एक तत्व का संदर्भ दिया हो जो मौजूद नहीं है। यह संभव है कि सबस्क्रिप्ट संभावित सबस्क्रिप्ट या आयामों की सीमा से बड़ा या छोटा हो या इस बिंदु पर एप्लिकेशन में सरणी को आयाम नहीं सौंपे गए हों।
- अपरिभाषित तत्व: यह संभव है कि आपने अपने कोड में तत्वों की संख्या की पहचान नहीं की हो, यह महत्वपूर्ण है कि सरणी में तत्वों की संख्या "Dim" या "ReDim" कमांड का उपयोग करके परिभाषित की जाए।
- गलत संग्रह सदस्य: कुछ मामलों में, उपयोगकर्ता ने एक संग्रह सदस्य का संदर्भ दिया हो सकता है जो मौजूद नहीं है। यदि संग्रह सदस्य की ओर गलत संदर्भ दिया जाता है, तो यह त्रुटि ट्रिगर हो सकती है।
- शॉर्टहैंड स्क्रिप्ट: यह संभव है कि आपने सबस्क्रिप्ट के एक संक्षिप्त रूप का उपयोग किया हो और यह एक तत्व को निहित रूप से निर्दिष्ट करता हो जो अमान्य था। एक वैध कुंजी नाम का उपयोग करना महत्वपूर्ण है।
अब जब आपको समस्या की प्रकृति की बुनियादी समझ है, तो हम समाधानों की ओर बढ़ेंगे। टकराव से बचने के लिए इन्हें प्रस्तुत किए गए विशिष्ट क्रम में लागू करना सुनिश्चित करें।
समाधान 1: सरणियों की जांच
यह संभव है कि आपने सरणी तत्व के लिए गलत मान परिभाषित किया हो। इसलिए, सरणी तत्व के लिए आपके द्वारा परिभाषित मान को दोबारा जांचने की सिफारिश की जाती है और सुनिश्चित करें कि यह सही है। साथ ही, सरणी की घोषणा की जांच करना सुनिश्चित करें और ऊपरी और निचली सीमाओं को सत्यापित करें। यदि सरणियों को पुनः आयामित किया गया है, तो सशर्त एक्सेस के लिए LBound और UBound फ़ंक्शन का उपयोग करना सुनिश्चित करें। यदि इंडेक्स एक वेरिएबल है तो वेरिएबल नाम की वर्तनी जांचें।
समाधान 2: तत्वों की संख्या निर्दिष्ट करना
कुछ मामलों में, यह संभव है कि आपने अपने कोड में तत्वों की संख्या परिभाषित नहीं की हो जिसके कारण त्रुटि ट्रिगर हो रही है। यह अनुशंसा की जाती है कि आप Dim या ReDim फ़ंक्शन का उपयोग करके सरणी में तत्वों की संख्या निर्दिष्ट करें।
समाधान 3: निर्माण बदलना
यह त्रुटि आमतौर पर तब ट्रिगर होती है जब उपयोगकर्ता गलत या गैर-मौजूद संग्रह सदस्य निर्दिष्ट करता है। इसलिए, इंडेक्स तत्वों को निर्दिष्ट करने के बजाय, "For Each...Next" निर्माण के साथ दृष्टिकोण करने की सिफारिश की जाती है।
समाधान 4: कीनाम और इंडेक्स की जांच
कुछ मामलों में, यह संभव है कि आपने सबस्क्रिप्ट के संक्षिप्त रूप का उपयोग किया हो और यह एक अमान्य तत्व निर्दिष्ट करता हो। इसलिए, यह अनुशंसा की जाती है कि आप संग्रह के लिए एक वैध कुंजी नाम और इंडेक्स का उपयोग करें।