VBA错误处理程序:On Error Resume在处理程序中不起作用

Axe*_*iot 1 error-handling vba

在Excel VBA中,我打开一个Word应用程序和一个doc.我想确保文档和Word最后都关闭,即使出现错误.

我创建了一个错误处理程序On Error GoTo ErrorHandler,它有效.但是objDoc.Close当没有打开文档时运行失败(运行时错误424),objWord.Quit尽管我打电话,Sub也被中止了On Error Resume Next.

为什么On Error Resume Next不在那里工作?

(在VBA选项中,错误陷阱设置为"中断未处理的错误".)

Sub test()
    On Error GoTo ErrorHandler
    ' Open doc in Word
    Set objWord = CreateObject("Word.Application")
    objWord.Visible = False
    Set objDoc = objWord.Documents.Open("not a valid doc.docx")

    ....

    ' Save and exit
    objDoc.Save
    objDoc.Close
    objWord.Quit
    Exit Sub

ErrorHandler:
    MsgBox "Error " & Err.Number & vbLf & Err.Description
    On Error Resume Next
    ' Exit
    objDoc.Close SaveChanges:=False
    objWord.Quit
    On Error GoTo 0
End Sub
Run Code Online (Sandbox Code Playgroud)

Dic*_*ika 5

就像@Comintern说的那样,我会这样做

Sub test()
    Dim objWord As Object
    Dim objDoc As Object

    On Error GoTo ErrorHandler
    ' Open doc in Word
    Set objWord = CreateObject("Word.Application")
    objWord.Visible = False
    Set objDoc = objWord.Documents.Open("not a valid doc.docx")




ErrExit:
    On Error Resume Next
    objDoc.Save
    objDoc.Close
    objWord.Quit
    Exit Sub

ErrorHandler:
    MsgBox "Error " & Err.Number & vbLf & Err.Description
    Resume ErrExit
End Sub
Run Code Online (Sandbox Code Playgroud)

Resume语句使您退出错误状态并允许您重置错误陷阱.

  • Upvoted; 我只想补充一点,应该显式声明变量,并且`objWord.Documents`的双点引用正在泄漏隐式集合对象,这意味着OP可能在其任务管理器中有一堆WINWORD.EXE鬼进程(参见我删除的答案) (2认同)