在UDF中使用VBA代码search时,是否可以使用FindPrevious?

我正在尝试使用VBA来处理基于“查找”函数的结果,因为它比查询结果的每个单元轮询要快得多。

我已经把它切回到它是重现错误的基础知识,我仍然得到“对象variables或块variables未设置”这部分的错误SearchRange.FindPrevious.Address (你必须停下来,并把它一步到得到错误,UDF的只是退出了debugging模式以外的错误,而没有返回错误)

这里是kicker,当试图在表中使用UDF时出现错误,如下所示: =testfind("3206-1",E:E)但是当我在VBE的直接窗口中使用它时,如下所示: ?testfind("3206-1",Range("E:E"))我得到正确的结果$E$15295没有错误。

代码是:

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

修改L42的变化,现在它的工作原理:

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

EDIT1:

这个代码

 TestFind = SearchRange.FindPrevious.Address 

正如以前所build议的那样:

 TestFind = SearchRange.FindPrevious(ActiveAddress).Address 

当您将它用作Dan所经历的工作表函数时,它不起作用。
下面并不直接回答这个问题,而只是一个select。

可选:Find方法中更改SearchDirection参数。

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

注意:您需要添加error handling程序来捕获没有find匹配的search。

如何testing:

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