在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