使用VLookUp函数时报错:WorksheetFunction对象的VLookup属性无法赋值
解决WorksheetFunction.VLookup的“无法赋值”错误
这个错误我之前也踩过坑,核心原因是WorksheetFunction.VLookup在找不到匹配项时会直接抛出运行时错误,而不是像单元格里的VLOOKUP函数那样返回#N/A,这就导致你直接赋值的时候触发了“无法赋值”的问题。结合你的场景,给你几个具体的解决思路:
1. 改用Application.VLookup替代(最推荐)
Application版本的VLookup容错性更强,找不到匹配时会返回错误值(可以用IsError判断),不会直接中断代码。示例代码如下:
Dim companyName As Variant ' 精确匹配查找第二列的公司名称 companyName = Application.VLookup(tmp, lookupWS.Range("A:Y"), 2, False) ' 处理查找结果 If Not IsError(companyName) Then ' 找到匹配值,替换成你要赋值的目标单元格/变量 Debug.Print "找到对应公司:" & companyName Else ' 未找到匹配的处理逻辑 Debug.Print tmp & " 未找到对应的公司名称" End If
2. 确认几个关键参数的正确性
- 工作表引用:确保
lookupWS已经通过Set lookupWS = ThisWorkbook.Sheets("你的工作表名")正确初始化,避免引用到错误的工作表。 - 匹配类型:最后一个参数一定要设为
False(精确匹配),如果设为True(近似匹配),要求第一列必须升序排序,否则会出现不可预期的错误或结果。 - 数据类型匹配:检查
tmp(唯一ID)的类型和查找范围第一列(A列)的数据类型是否一致。比如如果A列是数值型,而tmp是字符串,可能会匹配失败,这时候可以用CLng(tmp)或者CDbl(tmp)转换类型后再查找。
3. 捕获WorksheetFunction的错误(可选,不推荐)
如果你坚持要用WorksheetFunction,可以用错误捕获语句处理,但这种方式容易隐藏其他潜在问题,不如第一种方法直观:
Dim companyName As String On Error Resume Next companyName = WorksheetFunction.VLookup(tmp, lookupWS.Range("A:Y"), 2, False) On Error GoTo 0 If companyName <> "" Then ' 处理找到的结果 Else ' 处理未找到的情况 End If
内容的提问来源于stack exchange,提问作者Patrick.H
相关产品推荐
相关产品推荐

