在VBA中使用IFERROR

Lyn*_*ott 1 excel vba excel-vba

我希望有人可以帮助我吗?我做了很多谷歌搜索,无法弄清问题是什么.我只涉足vba,所以我当然不是专家......

我试图在工作中的巨大电子表格中自动执行一些计算,我想我可能会遗漏一些非常愚蠢的东西.基本上,其中一个计算是一个单元格与另一个单元格的简单划分.当它遇到错误时,我希望它返回0.这是不断跳过的代码:

Sheets("Bridge").Range("W" & SumIfInt) = Application.WorksheetFunction.IfError(Sheets("Bridge").Range("AA" & SumIfInt) / Sheets("Bridge").Range("D" & SumIfInt), 0)
Run Code Online (Sandbox Code Playgroud)

我得到一个运行时错误6溢出

提前致谢

Abs*_*the 8

在编程时,最好先通过检查它的可能性来避免错误,而不是触发它然后处理它.在执行计算之前检查单元格是空还是零:

If IsEmpty(Sheets("Bridge").Range("D" & SumIfInt)) Or Sheets("Bridge").Range("D" & SumIfInt) = 0 Then
    Sheets("Bridge").Range("W" & SumIfInt) = 0
Else
    Sheets("Bridge").Range("W" & SumIfInt) = Sheets("Bridge").Range("AA" & SumIfInt) / Sheets("Bridge").Range("D" & SumIfInt)
End If
Run Code Online (Sandbox Code Playgroud)

On Error Resume Next基本上说"如果遇到错误就忽略它".这可能会导致各种意外问题,并且只能作为最后的手段使用.

另请查看VBA中的IsError函数.

  • 当然,OP 接受“On Error Resume Next”解决方案。好消息:我们很快就会再次看到那个 OP。 (2认同)

Mid*_*dle 6

尝试不使用If错误功能。如下所述,您应该非常谨慎地使用On error resume。

警告:On error resume next除非On error goto 0存在,否则将跳过所有错误情况以获取其余代码。另外,如果您想捕获特定的错误,可以使用相应地if error = 'number' then进行处理。与excel vba相比,在excel中更好地使用Application.worksheetfunction.iserror。

    On error resume next
    Sheets("Bridge").Range("W" & SumIfInt) = Sheets("Bridge").Range("AA" & 
    SumIfInt) / Sheets("Bridge").Range("D" & SumIfInt)

    if err <>0 then
       Sheets("Bridge").Range("W" & SumIfInt) = 0
    end if
    On error goto 0
Run Code Online (Sandbox Code Playgroud)