Закрыть Открыть экземпляр 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". Смотрите это для теории и практики.