Function ShellAndWait(sCommandLine As String, Optional lState As Long = vbNormalFocus) As Long Dim lRetVal As Long If FileExists(sCommandLine) Then If Left$(sCommandLine, 1) <> Chr$(34) Then sCommandLine = Chr$(34) & sCommandLine End If If Right$(sCommandLine, 1) <> Chr$(34) Then sCommandLine = sCommandLine & Chr$(34) End If End If lRetVal = Shell(sCommandLine, lState) ShellAndWait = OpenProcess(SYNCHRONIZE, True, lRetVal) Do lRetVal = WaitForSingleObject(ShellAndWait, 0) If lRetVal = WAIT_OBJECT_0 Then lRetVal = CloseHandle(ShellAndWait) Exit Do ElseIf lRetVal = WAIT_FAILED Then lRetVal = CloseHandle(ShellAndWait) Exit Do End If Pause 100 'Pause 500 Loop End Function