vbscript excel.application

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.