关闭打开 Excel 个实例

Close Open Excel Instance

有人可以告诉我以下简单的 VBScript 是否正确吗? 它应该在其他进程 运行(并保持 Excel 打开)后关闭 Excel,但它不起作用。

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

请试试这个。

ThisWorkbook.Saved = True
Application.Quit

CreateObject 创建 一个 COM 对象,因此您的

Set MyApp = CreateObject("Excel.Application") 

启动一个新的 Excel 进程。使用 GetObject to "retrieve an existing object with the specified ProgID". See this 进行理论和实践。

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