Allora in testa al programma devi mettere (dove metti le variabili globali al form)
codice:
Private Declare Function WaitForSingleObject Lib "KERNEL32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function OpenProcess Lib "KERNEL32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "KERNEL32" (ByVal hObject As Long) As Long
Poi usi questa funzione per eseguire il file:

codice:
Public Sub ShellWait(ByVal FileName As String, Optional WindowStyle As Variant)
    Dim idProc As Long
    Dim hProc As Long

    idProc = VBA.Shell(FileName, WindowStyle)

    hProc = OpenProcess(&H1F0FFF, False, idProc)
    'attendi fine programma
    If hProc <> 0 Then
        Call WaitForSingleObject(hProc, INFINITE)
        Call CloseHandle(hProc)
    End If
End Sub
Quindi al posto di shell usi questa sub e non devi temporizzare niente.