vbscript - Cerrar la instancia de Excel abierta
excel.application (3)
Prueba esto por favor.
ThisWorkbook.Saved = True
Application.Quit
¿Podría alguien decirme si el siguiente sencillo VBScript es correcto? Se supone que cierra Excel después de que se hayan ejecutado otros procesos (y dejó Excel abierto), pero no funciona.
Set MyApp = CreateObject("Excel.Application")
MyApp.Quit
CreateObject
crea un nuevo objeto. Si entiendo correctamente su pregunta, desea adjuntarla a procesos de Excel que ya estén en ejecución (huérfanos) para finalizarlos. Puedes hacer eso con 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
Tenga en cuenta que esto intentará cerrar todas las instancias en ejecución de Excel, descartando todos los cambios en los libros abiertos. Si desea guardar cambios en libros abiertos, cambie el argumento del método Close
a True
. Si tiene instancias de Excel que desea seguir ejecutando, necesita agregar código para excluirlas de su cierre.
Tenga en cuenta también que esto no terminará a la fuerza las instancias que no responden. Deberías matar el proceso por eso:
Set wmi = GetObject("winmgmts://root/cimv2")
For Each xl In wmi.ExecQuery("SELECT * FROM Win32_Process WHERE Name = ''excel.exe''")
xl.Terminate
Next
CreateObject crea un objeto COM, por lo que su
Set MyApp = CreateObject("Excel.Application")
comienza un nuevo proceso de Excel. Use GetObject para "recuperar un objeto existente con el ProgID especificado". Vea esto para la teoría y la praxis.