/ / बंद करें एक्सेल इंस्टेंस खोलें - vbscript, excel.application

एक्सेल एक्सेल इंस्टेंस खोलें - vbscript, excel.application

अगर कोई निम्नलिखित सरल वीबीस्क्रिप्ट सही है तो क्या कोई मुझे बता सकता है? यह अन्य प्रक्रियाओं के चलने के बाद Excel को बंद करना है (और एक्सेल खुला छोड़ दिया गया है), लेकिन यह काम नहीं करता है।

Set MyApp = CreateObject("Excel.Application")
MyApp.Quit

उत्तर:

जवाब के लिए 3 № 1

CreateObject एक नई वस्तु बनाता है। अगर मैं आपके प्रश्न को सही ढंग से समझता हूं तो आप उन्हें समाप्त करने के लिए पहले से चल रहे (अनाथ) एक्सेल प्रक्रियाओं से जुड़ना चाहते हैं। आप इसके साथ कर सकते हैं GetObject:

On Error Resume Next
Do
Set xl = GetObject(, "Excel.Application")
status = Err.Number
If status = 0 Then
For Each wb in xl.Workbooks
wb.Close False  "discard changes in open workbooks
Next
xl.Quit
ElseIf status <> 429 Then
WScript.Echo Err.Number & ": " & Err.Description
WScript.Quit 1
End If
Until status = 429
On Error Goto 0

ध्यान दें कि यह खुले कार्यपुस्तिकाओं में सभी परिवर्तनों को छोड़कर, सभी चल रहे एक्सेल उदाहरणों को बंद करने का प्रयास करेगा। यदि आप इसे खुले कार्यपुस्तिकाओं में परिवर्तनों को सहेजना चाहते हैं तो इसका तर्क बदल दें Close करने के लिए विधि True। यदि आपके पास एक्सेल उदाहरण हैं जो आप चलाना चाहते हैं, तो आपको उन्हें बंद होने से बाहर करने के लिए कोड जोड़ने की आवश्यकता है।

ध्यान दें, कि यह जबरन उत्तरदायी उदाहरणों को समाप्त नहीं करेगा। आपको इसके लिए प्रक्रिया को मारने की जरूरत है:

Set wmi = GetObject("winmgmts://root/cimv2")
For Each xl In wmi.ExecQuery("SELECT * FROM Win32_Process WHERE Name = "excel.exe"")
xl.Terminate
Next

जवाब के लिए 0 № 2

कृपया इसे आजमाएं।

ThisWorkbook.Saved = True
Application.Quit

जवाब के लिए 0 № 3

CreateObject बनाता है एक COM वस्तु, तो आपका

Set MyApp = CreateObject("Excel.Application")

एक नई एक्सेल प्रक्रिया शुरू करता है। उपयोग GetObject "निर्दिष्ट प्रोजेक्ट के साथ एक मौजूदा ऑब्जेक्ट पुनर्प्राप्त करें"। देख इस सिद्धांत और praxis के लिए।