如果VBA中的错误函数不返回0
下面的VBA函数在错误时不返回“0”(即,当-
不存在于string中时):
Function check(input1 As Range) As Variant check = WorksheetFunction.IfError(WorksheetFunction.Search("-", input1.Cells(1).Value), 0) End Function
有解释和替代吗?
这个:
WorksheetFunction.Search("-", input1.Cells(1).Value)
如果被testing的值不包含“ – ”,将会引发VBA运行时错误。 您无法使用WorksheetFunction.IfError
来抑制此运行时错误
如果你想做这样的事情,那么你可以使用
Application.Search()
代替
[Application.]WorksheetFunction.Search()
如果没有WorksheetFunction
限定符,Search()将返回一个不匹配的错误值,您可以使用IfError()
或VBA等价的IsError()
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
不过@ExcelHero指出,VBA有Instr()
,你可以使用它来得到相同的结果,而不需要错误检查。
IFERROR
最好用在工作表上,而不是VBA中。
在你的情况下,最直接的select是这样的:
Function check(input1 As Range) As Variant check = InStr(input1, "-") End Function