【发布时间】:2019-02-07 15:19:00
【问题描述】:
在 Excel VBA 中,我打开一个 Word 应用程序和一个文档。 我想确保文档和 Word 在最后关闭,即使出现错误。
我用On Error GoTo ErrorHandler 创建了一个错误处理程序,它可以工作。但是当文档未打开时,objDoc.Close 失败(运行时错误 424),并且 Sub 在 objWord.Quit 之前中止,尽管我调用了 On Error Resume Next。
为什么On Error Resume Next 在那里不起作用?
(在 VBA 选项中,错误捕获设置为“Break on Unhandled Errors”。)
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
【问题讨论】:
-
On Error语句不应该在错误状态下执行... -
此类内容的常用模式是将
Resume转换为您进行清理的标签 - 例如' Save and exit所在的位置。 -
见Good Patterns For VBA Error Handling - 值得一读。
标签: vba error-handling