关闭打开Excel实例

时间:2015-06-22 00:55:01

标签: vbscript excel.application

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

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

3 个答案:

答案 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了解理论和实践。