Закрыть Открыть экземпляр Excel

Может кто-нибудь, пожалуйста, дайте мне знать, если следующий простой VBScript является правильным? Предполагается закрыть Excel после запуска других процессов (и оставить Excel открытым), но это не работает.

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

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

Попробуйте это, пожалуйста.

ThisWorkbook.Saved = True
Application.Quit

CreateObject создает COM-объект, поэтому ваш

Set MyApp = CreateObject("Excel.Application") 

запускает новый процесс Excel. Используйте GetObject для "извлечения существующего объекта с указанным ProgID". Смотрите это для теории и практики.

Другие вопросы по тегам