RE:Aplicacion terminada...
Es algo así:
Primero va esto en la seccione declaraciones de un módulo:
Public Activa As Long
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Public Const STILL_ACTIVE = &H103
Public Const PROCESS_QUERY_INFORMATION = &H400
Public Declare Function TerminateProcess Lib "kernel32" (ByVal tProcess As Long, ByVal uExitCode As Long) As Long
-------------------------------------------------------------------------------------------------
Después te hacés una Sub, que para mi yo le puse "EJECUTAR":
Public Sub EJECUTAR(Programa As String)
hProceso = OpenProcess(PROCESS_QUERY_INFORMATION, 0, Shell(Programa, 6))
Do
ret = GetExitCodeProcess(hProceso, Activa)
DoEvents
Loop While Activa = STILL_ACTIVE
End Sub
...y le pasás como parámetro el nombre del prog. que querés ejecutar. El loop Do-Loop While se sigue ejecutando mientras el proceso lanzado (tu programa) continúa ejecutándose. Es importante incluir dentro de este loop a "DoEvents", que permite que cualquier otro programa en la PC pueda ejecutarse mientras dura el loop, de lo contrario tu PC parecerá colgada hasta que el loop termine.
...espero no haberle sacado algo esencial, pues esta Sub es mucho más larga en mi programa.
Suerte.