2016-09-24 6 views
5

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

Dim Response As Variant 

Response = MsgBox("Are you sure you want to delete this worksheet?", vbYesNo + vbExclamation, "Confirm Action") 
If Response = vbNo Then 
    GoTo exit sub 
End If 

'Save workbook prior to deletion as a precaution 
ThisWorkbook.Save 

ActiveSheet.Delete 

किसी कारण से और मैं उन्हें हर बार reinitialize करने के लिए है: मैं एक बटन है कि इस अनिवार्य रूप से करता है। मैंने डेलटे के बाद अपने इनिटवायरबेल मैक्रो कॉल को जोड़ने का प्रयास किया और यह अभी भी काम नहीं करता है।

ऐसा कोई कारण क्यों हो रहा है?

उत्तर

9

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

ध्यान दें कि यह तब तक होता है जब तक कोड चलना बंद नहीं हो जाता है और फिर से संकलित किया जाता है। यह ठीक काम करता है:

Sheet1.foo = 42  'foo is a public variable in Sheet1 
Sheet2.Delete 
Debug.Print Sheet1.foo 'Prints 42 
+0

मुझे लगता है। क्या कोई तरीका है कि मैं अपने initVariables कॉल को फिर से संसाधित प्रक्रिया के दौरान सम्मिलित कर सकता हूं? – KingKong

+0

संकलन कॉल को रोकने के लिए वास्तव में एक अच्छा तरीका नहीं है, और निश्चित रूप से वीबीए से नहीं। आपके ग्लोबल्स में आपके पास क्या है? यदि आप उन्हें 'इनिटवायरबेल' कॉल के साथ पुन: बना सकते हैं, तो क्या यह आपके कॉल से पहले कॉल करने के लिए आसान होगा? – Comintern

+0

हाँ, यह काफी है जो मैं कर रहा हूं। मैं बस याद रखना नहीं चाहता था कि हर बार जब मैं एक नया सब या फ़ंक्शन लिखता हूं। – KingKong

3

मैंने अभी कॉमिनर्न फू का उपयोग करके इसका परीक्षण किया। यह दिलचस्प है कि मानक मॉड्यूल foo इसे मान देता है लेकिन वर्कशीट मॉड्यूल में सार्वजनिक foo चर इसके मूल्य को खो देता है।

enter image description here

संबंधित मुद्दे