我正在尝试使用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
答案 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