如果VBA中有IsError?

use*_*776 2 excel vba excel-vba

是否可以在VBA中使用具有与Iferror(value,value_if_error)或Iserror(value)类似功能的东西?

我试着写:

If IsError(Cells(i, c) / curr) Then
'CODE BLOCK 1
else
'CODE BLOCK 2
end if
Run Code Online (Sandbox Code Playgroud)

但是VBA告诉我,当我尝试运行if语句时,我有零错误.它让我进入调试.但这只是我想触发CODE BLOCK 1的类型!

chr*_*sen 8

通常的方法是处理这个问题

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
Run Code Online (Sandbox Code Playgroud)


Jus*_*ies 5

您可以使用调用所有工作表函数 Application.WorksheetFunction.IsError(args)

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

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
Run Code Online (Sandbox Code Playgroud)