为什么IfError返回错误?

我试图创build一个INDEX / MATCH查找方法的包装(这是比常规的VLOOKUP方法更快/更好)创build一个自定义函数,然后加载它作为一个加载项。

到目前为止这么好,但我希望的行为是,当被查找的价值没有find时,它应该返回空白(“”),而不是#VALUE !. 所以我试图使用IfError WorksheetFunction为了实现这一点,我会在Excel工作表上:

Function FastLookup(parLookupKey As Variant, parLookupRange As Range, parReturnRange As Range) As Variant FastLookup = Application.WorksheetFunction.IfError(Application.WorksheetFunction.Index(parReturnRange, Application.WorksheetFunction.Match(parLookupKey, parLookupRange, 0)), "") End Function 

再次,这仍然返回#VALUE! 如果在parLookupRange范围内找不到值。

不用说,如果我直接在Excel工作表上使用= IFERROR(FastLookup(H6,E3:E6,F3:F6),“”),它就可以工作。

有关如何使VBA版本的IfError工作的任何想法?

因为错误永远不会超过vba中的MATCH函数。 只要抛出一个错误,代码将停止。

用这个代替:

 Function FastLookup(parLookupKey As Variant, parLookupRange As Range, parReturnRange As Range) As Variant Dim t As Long On Error Resume Next t = Application.WorksheetFunction.Match(parLookupKey, parLookupRange, 0) On Error GoTo 0 If t > 0 Then FastLookup = parReturnRange(t) Else FastLookup = "" End If End Function 

我们现在捕获错误并忽略它。 然后我们testing它并返回正确的值。