首页 > 解决方案 > 当 VBA 错误处理程序导致错误时该怎么办?

问题描述

我目前正在开发一个更大的程序,该程序可能会在某些时候引发错误。所以我为这种情况添加了一个错误处理程序。其主要目标是关闭打开的 excel 工作簿wbk,这样我就不会在后台运行太多的 excel 应用程序。由于我不知道,程序的哪个部分可能导致错误,我不知道它的状态wbk以及它是否打开。我尝试添加检查,Nothingwbk is Nothing当时似乎是错误的。使用以下代码,我将The remote server machine does not exist or is unavailable (Error 462)在调用错误处理程序时得到:

错误处理程序

On Error Resume Next
resp = MsgBox(prompt:="Es ist ein Fehler aufgetreten! " & vbCrLf & vbCrLf & "Soll versucht werden weiter fortzufahren?" & _
    vbCrLf & vbCrLf & "Fehlercode: " & str(Err.Number) & " entstanden durch " & Err.Source & Chr(13) & Err.Description, _
    Buttons:=vbCritical + vbYesNo + vbDefaultButton1, _
    title:="Unbekannter Fehler", _
    HelpFile:=Err.HelpFile, _
    Context:=Err.HelpContext)

If Not wbk Is Nothing Then
    wbk.Close False
End If

If resp = vbNo Then Exit Sub
Resume Next

Afaik,我什至不应该因为On Error Resume Next. 编辑:它应该是因为“发生第二个错误时错误处理程序仍然处于活动状态,因此第二个错误不会被 On Error 语句捕获。” -来源

TL;DR:wbk如果它是打开的,则应该在错误处理中关闭它,但它会引发错误。

编辑: 我强制错误以调用错误处理程序。所述错误仅在第二次执行中发生,因此wbk正常设置该值,然后关闭工作簿并再次调用程序并在再次wbk初始化之前强制错误。

标签: excelvbaerror-handling

解决方案


在第二次执行期间,wbk它在被调用后具有任何值wbk.Close,这不是Nothing. 由于上面的 Nothing 检查,我现在Set wbk = Nothing在关闭后明确设置并且不再发生错误。

顺便提一句。我更改了响应,因为在恢复代码时关闭工作簿实际上没有意义。


推荐阅读