2012-05-16 16 views
6

में एक खुली कार्यपुस्तिका को बंद करते समय त्रुटि एक सबराउटिन में, मैं एक कार्यपुस्तिका खोलना चाहता हूं, इससे कुछ पढ़ना चाहता हूं, और इसे बंद कर सकता हूं।वीबीए उपयोगकर्ताफॉर्म

Run-time error '1004': 

Method 'Close' of object _Workbook failed 

मैं इस समस्या पुन: पेश करने के लिए एक न्यूनतम कोड स्निपेट पहचान की है:
किसी कारण के लिए, मैं कोई त्रुटि मिलती है।
एक नई एक्सेल फ़ाइल बनाएं। इसमें, उपयोगकर्ताफॉर्म बनाएं। कि पर, निम्नलिखित क्लिक करें घटना कोड के साथ एक कमांड बटन बनाने के लिए:

Private Sub CommandButton1_Click() 
    Dim filename As String 
    Dim opened_workbook As Workbook 

    filename = Application.GetOpenFilename() ' User selects valid Excel file 
    Set opened_workbook = Application.Workbooks.Open(filename) 
    ' File operations would occur here 
    opened_workbook.Close ' Exception thrown here 

    MsgBox "If you got here, it worked!" 
    Unload Me 
End Sub 

क्या वास्तव में मुझे perplexes कि इस त्रुटि को एक सादे पर एक ही कोड के साथ ऐसा नहीं होता है जब कमान बटन एक userform पर नहीं है (है सीधे वर्कशीट पर बटन)।

मुझे यह भी पता नहीं है कि इस व्यवहार को समझने के लिए और कहां देखना है (StackOverflow!)। मैं मैक 2011 के लिए एक्सेल का उपयोग कर वीबीए लिख रहा हूं और यदि यह एक फर्क पड़ता है तो विंडोज एक्सेल 2010 में जा सकता है।

+0

एफडब्ल्यूआईडब्ल्यू, आपका कोड विंडोज़ एक्सेल 2010 पर उपयोगकर्ता फॉर्म (और सादे कोड के रूप में) के लिए मेरे लिए काम करता प्रतीत होता है। – stephan

+0

डारन :(मुझे लगता है कि मुझे इसे विंडोज़ पर अभी परीक्षण करना चाहिए। हालांकि मुझे एक समाधान देखना अच्छा लगेगा जो विंडोज और मैक दोनों के लिए काम करता है। –

उत्तर

7

हाँ, एक्सेल 2011 में, यह एक बग है (अनियंत्रित - मुझे इसके लिए अभी तक कोई दस्तावेज नहीं मिला है)। आपको कोड को थोड़ा संशोधित करना होगा। इस

Private Sub CommandButton1_Click() 
    Dim filename As String 
    Dim opened_workbook As Workbook 

    filename = Application.GetOpenFilename() ' User selects valid Excel file 
    Set opened_workbook = Application.Workbooks.Open(filename) 

    Unload Me 

    opened_workbook.Close  

    MsgBox "If you got here, it worked!" 
End Sub 
+0

क्या मूर्खतापूर्ण बग है। 'डिम' के नीचे 'अनलोड मुझे' हटा दिया गया बयान और यह काम करता है। धन्यवाद! (मैंने कुछ 'स्क्रीन अपडेटिंग = गलत'/'ट्रू' लाइनों को थोड़ा सा आसान बनाने के लिए भी जोड़ा)। –

0

मैं इस सटीक मैक पर एक्सेल 11 पर समस्या (Windows पर ठीक Excel 2013 में काम किया था) की कोशिश करो, केवल त्रुटि एक मॉड्यूल उप कि UserForm से बुलाया गया था में हुई। यदि कोई (मेरे जैसा) किसी मॉड्यूल (या किसी अन्य स्थान) में उप/फ़ंक्शन से कार्यपुस्तिका का उपयोग करने का प्रयास कर रहा है जो उपयोगकर्ताफॉर्म के अंदर नहीं है तो आप 'Me' का उपयोग नहीं कर सकते हैं। 'मी' केवल उपयोगकर्ताफॉर्म कोड के भीतर प्रयोग योग्य है।

'अनलोड मुझे' के बजाय अनलोड फ़ंक्शन और आपके उपयोगकर्ताफॉर्म का नाम उपयोग करें।

Unload UserFormName 

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

  • कोई संबंधित समस्या नहीं^_^