有人請讓我知道如果下面的簡單VBScript是正確的? 它應該在其他進程運行(並保持Excel打開狀態)後關閉Excel,但它不起作用。關閉打開Excel實例
Set MyApp = CreateObject("Excel.Application")
MyApp.Quit
有人請讓我知道如果下面的簡單VBScript是正確的? 它應該在其他進程運行(並保持Excel打開狀態)後關閉Excel,但它不起作用。關閉打開Excel實例
Set MyApp = CreateObject("Excel.Application")
MyApp.Quit
CreateObject
創建一個新的對象。如果我正確理解你的問題,你想附加到已經運行(孤立的)Excel進程來終止它們。你可以做到這一點與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
注意,這會嘗試關閉所有運行Excel的情況下,丟棄在打開的工作簿的所有更改。如果您希望它保存打開的工作簿中的更改,請將Close
方法的參數更改爲True
。如果您想要繼續運行Excel實例,則需要添加代碼以將它們從關閉中排除。
另請注意,這不會強行終止無響應的實例。你需要殺死這個過程:
Set wmi = GetObject("winmgmts://root/cimv2")
For Each xl In wmi.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'excel.exe'")
xl.Terminate
Next
請嘗試此操作。
ThisWorkbook.Saved = True
Application.Quit
CreateObject創建一個COM對象,所以你
Set MyApp = CreateObject("Excel.Application")
不工作?你遇到錯誤還是不按預期運行? –
只是不做任何事情....沒有顯示錯誤。 –
所以你雙擊'.VBS'文件?出於故障排除的目的,我通常會將這些代碼放在外面:'MsgBox「開始」'然後'MsgBox「完成」'至少告訴我腳本運行了。如果您在設置「MyApp」之後還添加了「MsgBox Myapp.Name」,它也會告訴你一些事情。但真正的問題是你正在使用'CreateObject',它只是實例化一個新的excel。它沒有得到現有的。 –