1

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

我创建了一个错误处理程序On Error GoTo ErrorHandler,它可以工作。但是objDoc.Close当文档没有打开时失败(运行时错误 424),objWord.Quit虽然我调用了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
4

1 回答 1

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语句使您摆脱错误状态并允许您重置错误陷阱。

于 2019-02-07T15:36:23.107 回答