在VBA中执行XLookup函数遇运行时错误1004的解决问询
VBA中XLookup报错Runtime error 1004的解决办法
报错原因分析
出现Runtime error 1004: Unable to get the Xlookup property of the worksheetfunction class主要有以下几种可能:
- Excel版本不兼容:XLookup是Office 365、Excel 2021及后续版本新增的函数,旧版Excel(如2019及更早)没有内置这个函数,调用时会直接报错。
- 查找值不存在:使用
WorksheetFunction.XLookup时,如果查找目标在搜索区域中不存在,函数会直接抛出运行时错误,而非返回错误值。 - 变量拼写问题:你的代码中
rngRenurned是拼写错误(应为rngReturned),虽然不影响函数执行,但可能导致后续维护问题。
解决步骤
1. 确认Excel版本
打开Excel,点击「文件」→「账户」,查看右侧产品信息,确认是Office 365或Excel 2021及以上版本。如果是旧版本,要么升级Excel,要么改用VLookup或Index+Match组合替代。
2. 修改代码使用Application.XLookup
将WorksheetFunction.XLookup替换为Application.XLookup,这样当查找值不存在时,函数会返回错误值(如#N/A),而非直接报错,你可以通过错误处理逻辑捕获这种情况:
Sub searching() Dim strSearched As String Dim rngSearch As Range Dim rngReturned As Range ' 修正拼写错误 Dim result As Variant ' 用Variant接收结果,兼容错误值 strSearched = "FSATA" ' 缩小查找范围,避免整列扫描(提高效率) Set rngSearch = Sheets("asheet").Range("C1:C" & Sheets("asheet").Cells(Rows.Count, "C").End(xlUp).Row) Set rngReturned = Sheets("asheet").Range("B1:B" & Sheets("asheet").Cells(Rows.Count, "B").End(xlUp).Row) result = Application.XLookup(strSearched, rngSearch, rngReturned) ' 处理查找结果 If IsError(result) Then MsgBox "未找到匹配值" Else MsgBox "查找结果:" & result End If End Sub
3. 额外优化点
- 避免使用整列(
C:C)作为搜索/返回区域,改为使用实际数据范围,减少不必要的计算,提升代码运行效率。 - 加入错误处理逻辑,让代码在查找失败时给出友好提示,而非直接崩溃。
内容的提问来源于stack exchange,提问作者Reiler74
相关产品推荐
相关产品推荐

