Private Sub UsporiShell(ByVal program_name As String, ByVal window_style As Integer) Dim process_id As Long Dim process_handle As Long ' Start the program. On Error GoTo ShellError process_id = Shell(program_name, window_style) On Error GoTo 0 ' Wait for the program to finish. ' Get the process handle. process_handle = OpenProcess(SYNCHRONIZE, 0, process_id) If process_handle <> 0 Then WaitForSingleObject process_handle, INFINITE CloseHandle process_handle End If Exit Sub ShellError: MsgBox "Error starting task " & _ program_name & vbCrLf & _ Err.Description, vbOKOnly Or vbExclamation, _ "Error" End Sub