VBA错误处理程序:错误恢复在处理程序中不起作用
在ExcelVBA中,我打开了一个Word应用程序和其中的一个文档。 我想确保文档和Word在最后关闭,即使有错误 我创建了一个带有On error GoTo ErrorHandler的错误处理程序,可以正常工作。但是,当文档未打开时,objDoc.Close会失败运行时错误424,并且在objWord.Quit之前中止子对象,尽管我调用了error Resume Next 为什么错误恢复下一步不在那里工作 在VBA选项中,错误捕获设置为在未处理错误时中断VBA错误处理程序:错误恢复在处理程序中不起作用,vba,error-handling,Vba,Error Handling,在ExcelVBA中,我打开了一个Word应用程序和其中的一个文档。 我想确保文档和Word在最后关闭,即使有错误 我创建了一个带有On error GoTo ErrorHandler的错误处理程序,可以正常工作。但是,当文档未打开时,objDoc.Close会失败运行时错误424,并且在objWord.Quit之前中止子对象,尽管我调用了error Resume Next 为什么错误恢复下一步不在那里工作 在VBA选项中,错误捕获设置为在未处理错误时中断 Sub test() On E
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
我会这样做,就像@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语句可以让您摆脱错误状态,并允许您重置错误陷阱。下面是我的做法,就像@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语句使您脱离错误状态,并允许您重置错误陷阱。On error语句不应在错误状态下执行……这类内容通常使用的模式是恢复到一个标签,在该标签上执行清理操作,如“Save and exit is.”请参阅-值得一读。On error语句不应该在错误状态下执行…像这样的东西通常使用的模式是恢复到进行清理的标签上,比如“保存并退出”的位置。请参见-值得一读。向上投票;我只想补充一点,变量应该显式声明,objWord.Documents的双点引用正在泄漏隐式集合对象,这意味着OP的任务管理器中可能有一堆WINWORD.EXE重影进程see my deleted answerupvote;我只想补充一点,变量应该显式声明,objWord.Documents的双点引用正在泄漏隐式集合对象,这意味着OP的任务管理器中可能有一堆WINWORD.EXE重影进程。请参阅我删除的答案