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

时间:2019-02-07 15:19:00

标签: vba error-handling

在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

1 个答案:

答案 0 :(得分: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

Resume语句使您脱离错误状态,并允许您重置错误陷阱。