2012-12-10 25 views
5

बंद करें मैं एक्सेल शीट में एक सेल को संशोधित करने के लिए, अनुप्रयोगों के लिए विजुअल बेसिक में एक हैलो वर्ल्ड एप्लिकेशन लिखने की कोशिश कर रहा हूं। यहां यह है:vba स्क्रिप्ट वर्कबुक पर लटकती है।

Sub hello() 

    Dim obj As Object 
    Dim Workbook As Object 

    Set obj = CreateObject("Excel.Application") 
    Set Workbook = obj.Workbooks.Open("C:\Users\gbuday\Desktop\Oktatás\Excel\start.xlsx") 

    Workbook.Worksheets("Munka1").Range("B3") = "Hello World!" 

    Workbook.Close 
    Set Workbook = Nothing 
    Set obj = Nothing 

End Sub 

चलते समय, एक्सेल लटकता है और मैं स्क्रिप्ट चलाना बंद नहीं कर सकता, केवल एक्सेल प्रक्रिया को मार सकता हूं। इसे डिबग करना, यह Workbook.Close लाइन पर लटकता है। उस रेखा के साथ समस्या क्या है?

+0

आम तौर पर http://www.tushar-mehta.com/excel/vba/xl_doesnt_quit/ देखें। ऑब्जेक्ट (वर्कबुक) को एक भिन्न नाम के रूप में उपयोग करने के लिए भी अच्छा अभ्यास – brettdj

उत्तर

4

समस्या यह है कि आप एक्सेल को अपने परिचालन को पूरा करने के लिए पर्याप्त समय नहीं दे रहे हैं। आमतौर पर DoEvents समस्या का समाधान करेगा। इसके अलावा भ्रम से बचने के लिए, आप `WBK के रूप में 'के बजाय' वर्कबुक '

Sub hello() 
    Dim obj As Object, wbk As Object 

    Set obj = CreateObject("Excel.Application") 
    Set wbk = obj.Workbooks.Open("C:\Users\gbuday\Desktop\Oktatás\Excel\start.xlsx") 

    wbk.Worksheets("Munka1").Range("B3") = "Hello World!" 

    DoEvents 

    '~~> Change True to False if you do not want to save 
    wbk.Close SaveChanges:=True 

    Set wbk = Nothing: Set obj = Nothing 
End Sub 
+0

धन्यवाद, सिद्धार्थ, यह काम करता है। SaveChanges खंड महत्वपूर्ण बात थी। – Gergely

+0

+1 (यद्यपि परिवर्तन करने वाले दस को बदलने से यह अजीब लगता है) – brettdj

+0

@brettdj: बहुत सच :)। हालांकि कई परिदृश्यों में (ऊपर नहीं हो सकता है), हम कुछ गणना करने के लिए एक कार्यपुस्तिका खोलते हैं, कुछ अन्य गणनाओं के लिए आउटपुट का उपयोग करते हैं और फिर बिना सहेजे गए कार्यपुस्तिका को बंद करते हैं, इसलिए मैंने सोचा, मैं बस एक लाइनर में समझा सकता हूं टिप्पणी करें और पूछताछकर्ता को यह बताएं कि वह वास्तव में क्या चाहता है ... –

1

यह होना चाहिए

Workbooks.Close 

मैं भी लगता है कि" वर्कबुक "एक आरक्षित शब्द है और अपने चर नाम के लिए चाहते हो सकता है आपको इसके बजाय "wb" जैसे कुछ का उपयोग करना चाहिए। जब स्वचालित आप एक `सेट पश्चिम बंगाल = Nothing` से पहले` WB.Quit` का प्रयोग करेंगे

Dim wb As Workbook