有人可以告诉我以下简单的VBScript是否正确? 它应该在其他进程运行后关闭Excel(并保持Excel打开),但它不起作用。
Set MyApp = CreateObject("Excel.Application")
MyApp.Quit
答案 0 :(得分:3)
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
答案 1 :(得分:0)
请试试这个。
ThisWorkbook.Saved = True
Application.Quit
答案 2 :(得分:0)
CreateObject 创建 COM对象,所以
Set MyApp = CreateObject("Excel.Application")
启动一个新的Excel流程。使用GetObject来&#34;检索具有指定ProgID&#34;的现有对象。请参阅this了解理论和实践。