在MS Access VBA中执行外部程序并在VBA中捕获异常

时间:2018-12-07 10:24:53

标签: vba shell access-vba ms-access-2016

我想从MS Access VBA代码执行一个程序。单击按钮后,程序应执行。 我为此使用以下代码:

Dim myPath As String
myPath = "F:\MyExecutables\Prog_copy.exe"
iReturn = wsh.Run(myPath, windowStyle, waitOnReturn)

如果程序成功执行,iReturn给我1,如果有错误或异常,给我0。 如果返回值为0,我想在VBA中获取异常详细信息(至少是异常消息)。 该怎么办??

注意:我正在使用try catch块来处理prg_Copy.exe中的不同类型的异常。

1 个答案:

答案 0 :(得分:1)

假设您的程序使用StdErr输出错误,则可以使用以下代码读取错误:

Declare PtrSafe Sub SleepEx Lib "Kernel32.dll" (ByVal dwMilliseconds As Long, Optional ByVal bAlertable As Boolean = True)
Public Sub RunSomething()
    Dim wsh As Object
    Set wsh = CreateObject("WScript.Shell")
    Dim myPath As String
    myPath = "F:\MyExecutables\Prog_copy.exe"
    Dim ex As Object
    Set ex = wsh.Run("""" & myPath & """")
    Do While ex.Status = 0 'WshRunning
        SleepEx 50
    Loop
    If ex.Status = 2 'WshFailed
        Debug.Print ex.StdErr.ReadAll 'Print any errors
    End If
End Sub

大多数控制台程序将错误输出到StdErr。如果您的程序使用其他输出错误的方法,则需要使用其他方式捕获错误。