मुझे एक अजीब समस्या है, मुझे संदेह है कि यह एक्सेल के संस्करण से जुड़ा है, लेकिन मुझे बिल्कुल यकीन नहीं है। मैं इसे अकेले नहीं समझ सकता इसलिए मुझे आपकी मदद की ज़रूरत है। मेरे पास एक मैक्रो है, जो एक नई कार्यपुस्तिका पर संचालित होता है - यह कहीं भी सहेजा नहीं जाता है, क्योंकि कार्यकर्ता इसे बाद में मैन्युअल रूप से सहेज लेगा। मैक्रो एक .xlam प्रारूप ऐड-इन है, जो रिबन में कुछ बटन जोड़ता है और ये बटन कोड प्रारंभ करते हैं। कोड के अंदर मेरे पास एक नई कार्यपुस्तिका खोलने के लिए सरल रेखाएं हैं, जिसे पहले उपयोगकर्ता द्वारा चुना गया था:

Application.DisplayAlerts = False
    Set wbMPA = Workbooks.Open(MPA_file)
Application.DisplayAlerts = True

इससे पहले, कोड सक्रिय कार्यपुस्तिका को एक वस्तु/कार्यपुस्तिका के रूप में सेट करता है जिस पर मैक्रो मुख्य रूप से काम करेगा (दोनों संस्करणों की कोशिश की):

Set dwb = Application.ActiveWorkbook

और बाद में कोड में

dwb.activate

या:

dwb = ActiveWorkbook.Name

और फिर

workbooks(dwb).Activate

लाइनें अलग-अलग उप में हैं, लेकिन चर को विश्व स्तर पर घोषित किया गया है।

कोड wbMPA के खुलने तक ठीक काम करता है (इसे स्थानीय लोगों में हर समय देखना)। जब मैं उपरोक्त कोड के साथ नई फ़ाइल खोलने का प्रयास करता हूं, तो पहले की कार्यपुस्तिका (dwb) अज्ञात कारणों से स्वयं को बंद कर देती है। पहली विधि से मुझे जो त्रुटि मिलती है वह यह है: त्रुटि स्क्रीनशॉट दूसरा एक सरल "सब्सक्राइब आउट ऑफ रेंज" देता है। हालाँकि, त्रुटियाँ कोई समस्या नहीं हैं। समस्या उनका कारण है, जो अज्ञात कारणों से कार्यपुस्तिका को बंद कर रही है।

यह तभी होता है जब मैं पूरी तरह से नई कार्यपुस्तिका खोलता हूं (स्टार्ट बार पर एक्सेल आइकन का उपयोग करके) - जब मैं इसे फ़ाइल से करता हूं -> नई -> खाली कार्यपुस्तिका पहले से खुली कार्यपुस्तिका का उपयोग कर, त्रुटि नहीं होती है।

एक और अजीब बात - मैं और मेरे सहयोगी काम से एक्सेल के 2013 संस्करण का उपयोग करते हैं। मेरे पास यह त्रुटि कभी नहीं है, उसके पास हर बार है।

यह कोड की एक सामान्य योजना है, इस मामले में अन्य चीजें व्यर्थ हैं क्योंकि कार्यपुस्तिकाओं/कार्यपत्रकों में कोई अन्य जोड़तोड़ नहीं हैं।

Dim dwb As Object
Dim wbMPA As Object

Sub_1()

Set dwb = ActiveWorkbook
Set wbMPA = Workbooks.Open(MPA_file)

Call Sub_2

End Sub 


Sub_2()

dwb.Activate

End Sub

मुझे Sub_2 में dwb के सक्रियण पर एक त्रुटि मिलती है, क्योंकि यह खुद को बंद कर देता है क्योंकि भगवान जानता है कि Sub_1 में wbMPA के खुलने का क्या कारण है।

-1
kshaq 6 अप्रैल 2017, 17:48
पहले, कोड सक्रिय कार्यपुस्तिका को एक वस्तु/कार्यपुस्तिका के रूप में सेट करता है जिस पर मैक्रो मुख्य रूप से काम करेगा < यह प्रासंगिक लगता है, आप इसे शामिल क्यों नहीं करते?
 – 
David Zemens
6 अप्रैल 2017, 17:52
हालांकि, यह अच्छे के लिए शुरू होने से पहले एक त्रुटि का कारण बनता है, < यह भी प्रासंगिक लगता है, आपको यह शामिल करना चाहिए कि कौन सा त्रुटि संदेश और कौन सी पंक्ति त्रुटि उठाती है।
 – 
David Zemens
6 अप्रैल 2017, 17:52
3
नहीं, आप जो वर्णन कर रहे हैं वह स्पष्ट नहीं है। अतिरिक्त कोड शामिल करने के लिए कृपया अपने प्रश्न को संशोधित करें (टिप्पणियों में कोड के बिट्स को पढ़ना मुश्किल है) और पहचानें कि कौन सी विशिष्ट त्रुटि किस पंक्ति में उत्पन्न होती है। अभी, आपकी टिप्पणी अस्पष्ट है ("यह मुझे कार्यपुस्तिका के बारे में त्रुटि देता है जो मौजूद नहीं है") - कौन सी कार्यपुस्तिका मौजूद नहीं है? यदि यह अस्तित्व में नहीं है तो आप इसे Set या Open करने का प्रयास क्यों कर रहे हैं?
 – 
David Zemens
6 अप्रैल 2017, 17:59
1
यदि आप किसी बंद कार्यपुस्तिका को Set करने का प्रयास कर रहे हैं, तो आपको या तो इसे खोलना होगा, या पूर्ण पथ का उपयोग करना होगा। साथ ही, आपकी लाइन dwb = ActiveWorkbook.Name तभी काम करेगी जब dwb एक String हो। कृपया कैसे पूछें भी देखें। हमें त्रुटि के स्क्रीनशॉट की आवश्यकता नहीं है, केवल त्रुटि का प्रकार, और वह कोड जिस पर त्रुटि ट्रिगर हो रही है। ..प्लस कोई प्रासंगिक कोड भी। अन्यथा, यह बहुत व्यापक है। आपने अपने चर कैसे घोषित किए?
 – 
BruceWayne
6 अप्रैल 2017, 18:37
1
हाँ, यह एक ऐड-इन है, .xlam, रिबन में कुछ नए बटन जोड़ना और ये बटन मैक्रो प्रारंभ करते हैं। मैंने आज पूरे दिन इसे डिबग करने की कोशिश की, और यह एक नई कार्यपुस्तिका के खुलने के बाद ही बंद हो जाता है, इसलिए चर खाली हैं और इससे त्रुटियां होती हैं। और फिर भी - मेरे पीसी पर त्रुटि मौजूद नहीं है। मुझे लगता है कि यह निशान हो सकता है।
 – 
kshaq
6 अप्रैल 2017, 19:51

1 उत्तर

सबसे बढ़िया उत्तर

यदि आपने केवल एक रिक्त कार्यपुस्तिका खोली है (उदाहरण के लिए, टूलबार से एक्सेल पर क्लिक करके) और फिर आप किसी भी नामांकित कार्यपुस्तिका को कोई भी परिवर्तन करने से पहले खोलते हैं। रिक्त कार्यपुस्तिका, रिक्त कार्यपुस्तिका गायब हो जाएगी। मेरा मानना ​​है कि यह सामान्य/अपेक्षित व्यवहार है।

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

ActiveWorkbook पर भरोसा करने से बचने के लिए सावधानी का एक शब्द - और विशेष रूप से इस मामले में यदि अपेक्षा हमेशा Set dwb एक नई/रिक्त कार्यपुस्तिका के लिए है, तो इसका सबसे अच्छा तरीका स्पष्ट रूप से एक नया बनाना है /रिक्त कार्यपुस्तिका, एक नई/रिक्त लक्ष्य कार्यपुस्तिका को मैन्युअल रूप से खोलने के लिए उपयोगकर्ता पर निर्भर रहने के बजाय।

Set dwb = Workbooks.Add

यदि, दूसरी ओर, dwb को किसी अन्य ज्ञात/मौजूदा कार्यपुस्तिका को सौंपा जाना चाहिए, तो आपको या तो Open कथन के लिए फ़ाइल पथ प्रदान करना चाहिए, या कार्यपुस्तिका का नाम Workbooks संग्रह।

संबंधित नोट पर, किसी कार्यपुस्तिका को सक्रिय करना लगभग कभी नहीं आवश्यक होता है, यहां देखें:

एक्सेल वीबीए मैक्रोज़ में चयन का उपयोग करने से कैसे बचें

और आगे ध्यान दें: आपके चर वैश्विक स्तर पर नहीं हैं, वे Dim कथन का उपयोग करके केवल मॉड्यूल के दायरे में हैं। एक सार्वजनिक घोषणा Public कीवर्ड का उपयोग करती है, न कि Dim कीवर्ड का। मॉड्यूल-स्कोप्ड और ग्लोबल-स्कोप्ड दोनों का उपयोग सावधानी के साथ किया जाना चाहिए (Public मॉड्यूल-स्कोप से अधिक) और ज्यादातर मामलों में आश्रित उप और कार्यों के संदर्भ में वस्तुओं/चर को पास करना बेहतर होता है:

एक्सेल वीबीए चर को एकाधिक मैक्रोज़ के लिए कैसे उपलब्ध कराया जाए?

2
Community 23 मई 2017, 13:30
वेलप, यह एक्सेल की एक संपत्ति है जिसे मैंने कभी नहीं देखा है और वास्तव में यह मामला हो सकता है। मैं इसे कल काम में आज़माउंगा और आपको बता दूंगा कि यह काम करता है या नहीं।
 – 
kshaq
6 अप्रैल 2017, 20:00
यह वास्तव में समस्या थी, उत्तर के लिए बहुत-बहुत धन्यवाद! इस तरह की एक छोटी सी अनदेखी ने मुझे इतनी परेशानियाँ दीं कि मुझे अभी भी विश्वास नहीं हो रहा है।
 – 
kshaq
7 अप्रैल 2017, 17:50
अति उत्कृष्ट! खुशी है कि मैं मदद कर सकता हूं, और निश्चित रूप से अगर इससे समस्या को हल करने में मदद मिली है, तो उत्तर को "स्वीकार करें" पर विचार करें। चीयर्स।
 – 
David Zemens
7 अप्रैल 2017, 17:54