在UDF中使用VBA代码进行搜索时是否可以使用FindPrevious?

时间:2017-01-23 02:52:25

标签: excel vba excel-vba user-defined-functions udf

我正在尝试使用VBA为UDF根据" Find"来操作其结果。因为它比轮询每个细胞寻找结果要快得多。

我已经将它切回到它的基础上来重现错误,我仍然得到"对象变量或者没有设置块变量"这一部分的错误SearchRange.FindPrevious.Address(您必须在该行上停止并执行它以获取错误,UDF' s退出而不将错误返回到调试模式之外)

这里是踢球者,我在尝试在这样的表格中使用UDF时遇到错误:=testfind("3206-1",E:E)但是当我在VBE的即时窗口中使用它时如此:{{1我得到?testfind("3206-1",Range("E:E"))没有错误的正确结果。

代码是:

$E$15295

使用L42的修改进行修改,现在可以正常使用:

Function TestFind(FindString As String, SearchRange As Range)
Dim ActiveAddress As Range
Set ActiveAddress = SearchRange.Find(FindString)
TestFind = SearchRange.FindPrevious.Address
End Function

1 个答案:

答案 0 :(得分:1)

<强> EDIT1:

此代码

TestFind = SearchRange.FindPrevious.Address

并且如前所述:

TestFind = SearchRange.FindPrevious(ActiveAddress).Address
当您将其用作工作表功能时,

无法正常工作 以下不直接回答问题,只是另一种选择。

备选方案:更改SearchDirection方法中的Find参数。

Function TestFind2(FindString As String, SearchRange As Range)
    Dim ActiveAddress As Range
    Set ActiveAddress = SearchRange.Find(FindString, , , , , xlPrevious)
    TestFind2 = ActiveAddress.Address
End Function

注意:您需要添加错误处理程序以捕获未找到匹配项的搜索。

如何测试:

Sub marine()
    Debug.Print TestFind(4, [A:A])
End Sub