Abrir un programa (cualquiera) con macro Excel

Debido a una tarea que ejecuta una aplicación de Excel, necesito abrir el programa XAMPP cada vez que se abre determinado archivo de Excel, la macro es la siguiente:

Sub AbrirXampp()
On error resume next
If Sheets("CONFIGURACION").Range("V20") = 0 Then Exit Sub
Shell "C:\xampp\xampp-control", vbminimiceNoFocus
End Sub

El problema que tengo es que el programa XAMPP se abre normalmente, pero si cierro la aplicación de Excel y la vuelvo a abrir, XAMPP se ejecuta nuevamente, lo que hace que quede abierto tantas veces como abro y cierro la apliación de Excel, por ello quisiera saber si me pueden indicar cómo hago para que si el programa XAMPP está abierto, no se vuelva a ejecutar la macro, o mejor aún que cada vez que cierre la aplicación de Excel, el programa XAMPP tambien se cierre automáticamente.

Respuesta
2

[Hola

Como para no usar llamadas a las funciones de la API de Windows que en código es bastante, sugiero una una rutina que cierre sí o sí el programa que especifiques. Prueba con esta cuyo autor no recuerdo:

Sub Cierra_Programa()
'Declaramos variables
Dim cObj As Object
Dim Programa As Object
Dim Proceso As Object
'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 = 'notepad.exe'")
'Con un For recorremos la consulta y cerramos el programa
For Each Programa In Proceso
On Error Resume Next
Call Programa.Terminate
On Error GoTo 0
Next
'Liberamos variables
Set Proceso = Nothing
Set cObj = Nothing
End Sub

En donde dice "notepad.exe" reemplaza por el nombre del ejecutable (*.exe) del "XAMPP" y sin olvidar la extensión.

Puedes usarla en el evento "BeforeClose" del libro.

Saludos]

Abraham Valencia

Buenas noches, primero que todo gracias por tomarse el tiempo para responder mi pregunta, respecto a ello le comento que he probado la macro pero no realmente no cierra el programa indicado, he cambiado el dato notepad.exe por el de xampp-control.exe que corresponde al archivo que deseo cerrar, pero no funciona, no sé si es molestia que se verifique si hay algún error en la instrucción.

Gracias nuevamente.

[Hola

La macro funciona, pero más bien tú no has comentado qué cambios le hiciste, cómo la has querido activar, en qué momento la activas, etc., por ahí puede venir el problema; además, debes estar segura de que el nombre del ejecutable del programa es "xampp-control.exe" y debes saber/conocer si activa a su vez otros ejecutables.

Puedes probar del siguiente modo:

- En tu Excel abre tu editor de VBA, ahí inserta un módulo standard: Insertar - Módulo

- En el módulo pega exactamente esto (no hagas ningún cambio):

Sub Cierra_Programa()
'Declaramos variables
Dim cObj As Object
Dim Programa As Object
Dim Proceso As Object
'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 = 'winword.exe'")
'Con un For recorremos la consulta y cerramos el programa
For Each Programa In Proceso
On Error Resume Next
Call Programa.Terminate
On Error GoTo 0
Next
'Liberamos variables
Set Proceso = Nothing
Set cObj = Nothing
End Sub

- Abre tu Word

- Una vez abierto regresa al Excel (sin cerrar el Word) y activa la macro

- El Word debe de haberse cerrado

De no cerrarse (que sería muy raro) borra la línea "On Error Resume Next", activa la macro y comenta que mensaje da.

Saludos]

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas