以下VBA函数在出错时没有返回“0”(即字符串中不存在-
时):
Function check(input1 As Range) As Variant
check = WorksheetFunction.IfError(WorksheetFunction.Search("-", input1.Cells(1).Value), 0)
End Function
有解释和替代方案吗?
答案 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