Vba 为什么这个vlookup会导致错误消息

Vba 为什么这个vlookup会导致错误消息,vba,Vba,当我尝试运行下面的代码时,会弹出以下错误消息:“无法获取WorksheetFunction类的Vlookup属性” 我一步一步地检查代码,第二个vlookup出现了这个。第一个vlookup运行良好 两次查找之间的唯一区别是,正在搜索的值已从范围(“R”&i)->范围(“S”&rrow)更改;i和rrow都是整数,并且两个范围都有存在的值 Worksheets("Sheet2").Cells(i, 22) = Not(IsError(Application.WorksheetFunction.V

当我尝试运行下面的代码时,会弹出以下错误消息:“无法获取WorksheetFunction类的Vlookup属性”

我一步一步地检查代码,第二个vlookup出现了这个。第一个vlookup运行良好

两次查找之间的唯一区别是,正在搜索的值已从范围(“R”&i)->范围(“S”&rrow)更改;i和rrow都是整数,并且两个范围都有存在的值

Worksheets("Sheet2").Cells(i, 22) = Not(IsError(Application.WorksheetFunction.VLookup(Range("R" & i),Worksheets("Sheet3").Range("AD:AD"), 1, False)))

Worksheets("Sheet2").Cells(i, 21) = Not(IsError(Application.WorksheetFunction.VLookup(Range("S" & rrow),Worksheets("Sheet3").Range("AD:AD"), 1, False)))
如果有人能告诉我为什么会发生这种情况,这将是一个很大的帮助



工作表函数界面是早期绑定的:在设计时,您会得到自动完成、参数快速信息工具提示等。在运行时,“早期绑定”工作表函数如果失败,将引发实际的VBA运行时错误

因此,返回值甚至从未到达IsError,因为该错误不是返回的,而是引发的

同样,您可以使用
Application.VLookup
来代替-这是后期绑定,因此在设计时,您不会得到自动完成,也不会得到参数快速信息工具提示;如果你打错了,编译器不会帮你的。在运行时,后期绑定的工作表函数将返回错误值(一个实际的
变量/错误
值),该值可与CVErr(xlErrNA)等进行比较,或馈送到
iError
进行评估

Not IsError(表达式)
将返回一个布尔值,而不是查找值-这可能是您想要的,也可能不是您想要的


因此,将
Application.WorksheetFunction.VLookup
替换为
Application.VLookup
,您的代码应该可以工作。。。除了

这两个范围都有存在的值

如果是这种情况,那么早期绑定的
WorksheetFunction.VLookup
不会引发错误(假设您的参数都正确)

<>最后,由于您只关心值是否存在,请考虑使用<代码>应用程序>匹配<代码> >(<代码>工作表函数>匹配<代码> >)-如果没有找到查找值,它也返回一个<代码> {n/a<代码>错误值,但应该执行得更好。


“无法获取WorksheetFunction类的{function name}属性”也可能意味着您的参数在某种程度上是错误的。行号应该是
Long
,而不是
Integer
,注意
Range(“R”&i)
隐含地指的是
ActiveSheet
是什么,由于未使用正确的
工作表
对象引用对其进行限定-可能活动工作表不是代码假定的工作表?

应用程序。如果未找到匹配项,WorksheetFunction.VLookup将停止代码<代码>非(iError(
将永远不会捕获错误。请删除
.WorksheetFunction
部分。它将传递错误。