Excel 如果IsError在VBA中?
在VBA中是否可以使用类似于IFERRO(值、值如果出错)或ISERRO(值)的功能 我试着写: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) 您还可以尝试直接在单元格中进行计算并查询
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
相同,两者都应该按照您的要求执行。