如果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