Excel WorksheetFunction.VLookup返回不一致结果的技术求助
求助:VBA中VLookup返回1004错误但工作表公式正常的问题
我正在处理大型Excel工作簿(含3200行VBA代码,大小127,536 KB),目标是检测公司各部门间/内部的图纸编号冲突。工作簿包含5个工作表,对应各部门的预留图纸编号列表:
- 每个工作表有5万至20万行数据,2-5列文本格式,目前仅使用第一列
- 图纸编号最长24位,包含字母、数字及特殊字符,示例:
_38017、075242-DIV
我的设备是Dell Precision 7770(i9处理器、64GB内存、6TB存储),工作簿加载需15-20秒,运行处理449384行数据需约35分钟。
现在遇到一个奇怪的问题:我用自定义函数IsItemNumberStrInNumLogWks检测图纸编号是否被某部门使用,调用Application.WorksheetFunction.VLookup时,明明存在的编号却返回1004错误,但在工作表中用VLookup公式可正常找到。
调用代码及参数
crntItemNumber = "22613900" : gcNumLogNameTab = "Div1_Number_Log" gcNumLogRangeDiv1 = "A2:B67113" If IsItemNumberStrInNumLogWks(crntItemNumber, gcNumLogNameTab, gcNumLogRangeHTPG) Then .....
自定义函数实现
Public Function IsItemNumberStrInNumLogWks( _ ByVal dwgNumStr As String, _ ByVal numLogTabName As String, _ ByVal strLogNumRange As String) As Boolean Dim numLogWks As Worksheet Dim numberLogRange As Range Dim numLogNumber As String: numLogNumber = "Not Found" On Error GoTo SetAsFalse Set numLogWks = Worksheets(numLogTabName) Set numberLogRange = numLogWks.Range(strLogNumRange) numLogNumber = Application.WorksheetFunction.VLookup(dwgNumStr, numberLogRange, 1, False) SetAsFalse: If Err.Number = 1004 Then IsItemNumberStrInNumLogWks = False Else IsItemNumberStrInNumLogWks = True End If End Function
数据示例(Notepad++查看)
Div1_Number_Log工作表数据:
22613700 C/Z 6 BASE, PIPE DOWN 22613900 VENTURI SUPPORT RIGHT, ET-5H 22626600 ACCUMULATOR BASE
All Parts All Divisions工作表数据:
C/Z 6 BASE, PIPE DOWN 22613700 Component VENTURI SUPPORT RIGHT, ET-5H 22613900 Component ACCUMULATOR BASE 22626600 Component
工作表公式验证
使用VLookup公式可正常找到编号:=IFERROR(VLOOKUP(A3,HTPG_Number_Log!$A$2:B$67113,1,FALSE),"Not Found")
但单步调试代码时,针对编号22613900仍出现1004错误,恳请各位帮忙排查问题,谢谢!
内容的提问来源于stack exchange,提问作者Scott M
相关产品推荐
相关产品推荐

