1

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

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

3 回答 3

4

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
于 2015-06-22T08:04:38.147 回答
0

请试试这个。

ThisWorkbook.Saved = True
Application.Quit
于 2015-06-22T01:59:17.523 回答
0

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

Set MyApp = CreateObject("Excel.Application") 

开始一个新的 Excel 进程。使用GetObject来“检索具有指定 ProgID 的现有对象”。有关理论和实践,请参见this

于 2015-06-22T06:29:12.670 回答