Excel 如果IsError在VBA中?

Excel 如果IsError在VBA中?,excel,vba,Excel,Vba,在VBA中是否可以使用类似于IFERRO(值、值如果出错)或ISERRO(值)的功能 我试着写: If IsError(Cells(i, c) / curr) Then 'CODE BLOCK 1 else 'CODE BLOCK 2 end if 但是VBA告诉我,当它试图运行if语句时,我有被零除的错误。它使我陷入调试。但这正是我想要触发代码块1的类型 您可以使用Application.WorksheetFunction.IsError(args) 您还可以尝试直接在单元格中进行计算并查询

在VBA中是否可以使用类似于IFERRO(值、值如果出错)或ISERRO(值)的功能

我试着写:

If IsError(Cells(i, c) / curr) Then
'CODE BLOCK 1
else
'CODE BLOCK 2
end if

但是VBA告诉我,当它试图运行if语句时,我有被零除的错误。它使我陷入调试。但这正是我想要触发代码块1的类型

您可以使用
Application.WorksheetFunction.IsError(args)

您还可以尝试直接在单元格中进行计算并查询其值。例如,非常黑客:

Sub asdf()

    Dim ws As New Worksheet
    Set ws = ActiveSheet

    Dim i As Double
    i = 0
    ws.Range("A2").Formula = "=iserror(A1 / " & i & ")"

    If ws.Range("A2").Value Then
        Debug.Print "Error caught"
    Else
        Debug.Print "No error"
    End If

End Subu

通常的处理方法是

i = 0
On Error Resume Next
n = 1 / i
If Err.Number <> 0 Then
    'Handle error - code block 1
    Err.Clear
    On Error GoTo 0
Else
    On Error GoTo 0
    ' No error - code block 2

End If
i=0
出错时继续下一步
n=1/i
如果错误号为0,则
'句柄错误-代码块1
呃,明白了
错误转到0
其他的
错误转到0
'无错误-代码块2
如果结束

为什么不检查
curr
是否为0?但是,是的,VBA在错误处理方面非常糟糕。也可能存在其他类型的错误,例如分子中存在文本。最简单的方法是检查是否有任何错误。我想我应该尝试LINE1:On error GoTo error Curr LINE2:Cells(I,c)=Cells(I,c)/InstanceCurrent LINE3:On error GoTo 0。但奇怪的是,被零除的错误并没有发送给错误处理程序。它触发调试。知道为什么吗?我找到了原因。代码中有一些早期的GoTo语句(由另一个人编写)导致了问题。如果Application.WorksheetFunctions.IsError(Cells(i,c)/curr)触发“对象不支持此属性或方法”。+1@user1283776是一个输入错误,应该是
Application.WorksheetFunction.IsError
。与
IfError
相同,两者都应该按照您的要求执行。