hola 
creo que esto es lo que buscas: 
en un modulo: 
Option Explicit 
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 Sub Ejecutar(Aplicacion As String)
   Dim hProceso As Long     'Handle del proceso
   Dim Activa As Long       'Valor devuleto por GetExitCodeProcess
   Dim ret As Long 
   'Ejecutar la aplicacion, y quedarse con el handle (manipulador)
   'del proceso, para poder controlar cuando termina
   'VBNormalFocus hace que la aplicación comienze en una ventana normal
   hProceso = OpenProcess(PROCESS_QUERY_INFORMATION, 0, Shell(Aplicacion, 1)) 
   Do
       'Obtiene información del proceso que iniciamos antes
       ret = GetExitCodeProcess(hProceso, Activa) 
       'Para que siga funcionando el sistema normalmente,
       'y se ejecuten los eventos
       DoEvents
   Loop While Activa = STILL_ACTIVE  'Sigue activa?
End Sub  
En la forma: 
Private Sub cmdEjecutar_Click()
   Ejecutar Trim(ruta de la aplicacion) 
   'desde aqui se ejecutara cuando la apliocacion cierre
   MsgBox "¡Listo! Ya terminó la aplicación ejecutada"
End Sub 
saludos  
 
 
hmtech