Un ejemplo simple:
Option Explicit
'Funciones del api
'''''''''''''''''''''''''''''''''''''''''''''''''''
Private Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" _
(ByVal hObject As Long) As Long
'Constantes
'''''''''''''''''''''''''''''''''''''''''''''''''''
Private Const PROCESS_QUERY_INFORMATION = &H400
Private Const STATUS_PENDING = &H103&
Private Sub Command1_Click()
Call Ejecutar_shell("notepad.exe")
End Sub
' Recibe el argumento de la línea de comandos para pasarle al Shell
Private Sub Ejecutar_shell(programa As String)
Dim handle_Process As Long
Dim id_process As Long
Dim lp_ExitCode As Long
' Abre el proceso con el shell
id_process = Shell(programa, 1)
' handle del proceso
handle_Process = OpenProcess(PROCESS_QUERY_INFORMATION, False, id_process)
' Mientras lp_ExitCode = STATUS_PENDING, se ejecuta el do
Do
Call GetExitCodeProcess(handle_Process, lp_ExitCode)
DoEvents
Loop While lp_ExitCode = STATUS_PENDING
' fin
' Cierra
Call CloseHandle(handle_Process)
MsgBox "Se cerró el " & programa, vbInformation
End Sub
Private Sub Form_Load()
Command1.Caption = " Ejecutar programa y esperar a que cierre "
End Sub
http://www.recursosvisualbasic.com.ar/htm/listado-api/205-abrir-programa-esperar-a-que-termine.htm
Estoy seguro de que no tendras ningun problema para adaptarlo
Saludos