Macro para esperar a que un programa deje de ejecutarse
He adaptado esta macro para cerrar procesos usando VBA, para que una macro espere a que un proceso termine.
https://excelsignum.com/2017/04/09/cerrar-un-programa-desde-excel-con-vba/
En el ejemplo, he puesto el word, pero se podría usar para cualquier programa.
Sub Espera_Cerrar_Programa()
'Declaramos variables
Dim cObj As Object
Dim Programa As Object
Dim Proceso As Object
Inicio:
'Rellenar ProgramaEjecutado
NombrePrograma = winword.exe
ProgramaEjecutado = 0
'Realizamos una consulta SQL para verificar si el programa está activo, en proceso.
Set cObj = GetObject("winmgmts://.")
Set Proceso = cObj.ExecQuery("SELECT * FROM " & "Win32_Process WHERE Name = '" & NombrePrograma & "'")
'Con un For recorremos la consulta para ver si el programa esta ejecutado
For Each Programa In Proceso
On Error Resume Next
Application.Wait (Now + TimeValue("00:00:02"))
ProgramaEjecutado = 1
On Error GoTo 0
Next
'Liberamos variables
Set Proceso = Nothing
Set cObj = Nothing
'Volver a ejecutar si ProgramaEjecutado = 1
If ProgramaEjecutado = 1 Then GoTo Inicio:
End Sub
'Declaramos variables
Dim cObj As Object
Dim Programa As Object
Dim Proceso As Object
Inicio:
'Rellenar ProgramaEjecutado
NombrePrograma = winword.exe
ProgramaEjecutado = 0
'Realizamos una consulta SQL para verificar si el programa está activo, en proceso.
Set cObj = GetObject("winmgmts://.")
Set Proceso = cObj.ExecQuery("SELECT * FROM " & "Win32_Process WHERE Name = '" & NombrePrograma & "'")
'Con un For recorremos la consulta para ver si el programa esta ejecutado
For Each Programa In Proceso
On Error Resume Next
Application.Wait (Now + TimeValue("00:00:02"))
ProgramaEjecutado = 1
On Error GoTo 0
Next
'Liberamos variables
Set Proceso = Nothing
Set cObj = Nothing
'Volver a ejecutar si ProgramaEjecutado = 1
If ProgramaEjecutado = 1 Then GoTo Inicio:
End Sub
Comentarios
Publicar un comentario