In a few cases, in particular when running MsDos batch files from within a VB application, you may want to determine the ERRORLEVEL set by an external application. You can’t do it with a plain Shell statement, but the job becomes easy with the support of the GetProcessExitCode API function:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As _ Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As LongPrivate Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As _ Long, lpExitCode As Long) As LongConst STILL_ACTIVE = &H103Const PROCESS_QUERY_INFORMATION = &H400Private Sub cmdRunNotepad_Click() Dim hTask As Long Dim hProcess As Long Dim exitCode As Long hTask = Shell("Notepad", vbNormalFocus) hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, hTask) ' loop until the process returns a valid exit code Do ' relinquish this CPU time slice Sleep 100 DoEvents ' query for exit code GetExitCodeProcess hProcess, exitCode Loop While exitCode = STILL_ACTIVE MsgBox "Exit code = " & exitCode, vbInformation End Sub