VBA中的IfError函数不返回0

时间:2015-09-05 19:47:48

标签: excel excel-vba vba

以下VBA函数在出错时没有返回“0”(即字符串中不存在-时):

Function check(input1 As Range) As Variant
check = WorksheetFunction.IfError(WorksheetFunction.Search("-",             input1.Cells(1).Value), 0)
End Function

有解释和替代方案吗?

2 个答案:

答案 0 :(得分:4)

此:

 WorksheetFunction.Search("-", input1.Cells(1).Value)
如果正在测试的值不包含“ - ”,

将引发VBA运行时错误。您无法使用WorksheetFunction.IfError

来抑制此运行时错误

如果你想做这样的事情,你可以使用

Application.Search()

而不是

[Application.]WorksheetFunction.Search()

如果没有WorksheetFunction限定符,Search()将返回一个不匹配的错误值,您可以使用IfError()或等效的VBA {{1}查看}

IsError()

正如@ExcelHero指出的那样,VBA有Function check(input1 As Range) As Variant Dim m m = WorksheetFunction.IfError(Application.Search("-", _ input1.Cells(1).Value), 0) check = WorksheetFunction.IfError(m, 0) 'or 'check = IIf(IsError(m), 0, m) End Function ,您可以使用它来获得相同的结果,而无需进行错误检查。

答案 1 :(得分:2)

IFERROR最好用在工作表上,而不是VBA中。

在您的场景中,最直接的选择是:

Function check(input1 As Range) As Variant
    check = InStr(input1, "-")
End Function