Yo lo ejecuto con estas funciones que te pego, en la primera espera a que termine y en la segunda solamente lo ejecuta y no espera nada.
Espero que te sirva.
Public Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
Public Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Public Const PROCESS_QUERY_INFORMATION = 1024
Public Const STATUS_PENDING = &H103
Public Const STILL_ACTIVE = STATUS_PENDING
Public Function Ejecutar(Aplicacion As String) As Long
Dim hProceso As Long
Dim Activa As Long
Dim ret As Long
hProceso = OpenProcess(PROCESS_QUERY_INFORMATION, 0, Shell(Aplicacion, 1))
Do
ret = GetExitCodeProcess(hProceso, Activa)
DoEvents
Loop While Activa = STILL_ACTIVE
Ejecutar = ret
End Function
Public Function EjecutarSinEspera(Aplicacion As String)
Dim hProceso As Long
Dim Activa As Long
Dim ret As Long
hProceso = OpenProcess(PROCESS_QUERY_INFORMATION, 0, Shell(Aplicacion, 1))
End Function