W10上的Excel 2013:不同工作表中的VBA Vlookup会产生错误1004

时间:2016-11-29 21:57:53

标签: excel vba vlookup

我正在开发一个应用程序,它使用规范代码在另一个电子表格中查找这些代码,并将第二个电子表格中的供应商编号返回到第一个,并将它们列在与规范代码相同的列中。

ActiveCell.FormulaR1C1 = Application.WorksheetFunction.VLookup(specsec, [Vendorspec.xlsx!vid], 4)

在上面的代码行中:

  • specsec是规格代码,形式为XX XX XX.XX
  • vlookup目标文件的名称是“VendorSpec.xlsx”。在此工作表中,每个代码都是第1列中的唯一条目,第4列中包含多个供应商编号中的第一个。将来的代码将遍历列,返回当前代码的所有后续供应商ID。

代码行产生错误“运行时错误'1004':无法获取工作表函数类的vlookup属性”。

有人可以建议修复吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

您的查询失败了,错误消息完全是误导性的。

VBA无法找到WorksheetFunction.VLookup成员,只是因为你的VLookup引发了错误。

您需要:

  • 使用On Error GoTo语句处理运行时错误

或者

  • 使用后期版本Application.VLookup,它不会为您提供 IntelliSense ,但在查找失败时不会抛出运行时错误,而是返回“错误2042”并且您可以通过将查询包装在IsError
  • 来测试查找是否失败

在活动工作表的单元格42中输入A1。然后在立即窗格

?iserror(application.VLookup(42,Range("A:B"),1,false))

返回False

?iserror(application.VLookup(43,Range("A:B"),1,false))

返回True

?application.WorksheetFunction.VLookup(42,Range("A:B"),1,false)

返回42

?application.WorksheetFunction.VLookup(43,Range("A:B"),1,false)

引发运行时错误:

Unable to get the VLookup property of the WorksheetFunction class

该消息的措辞更好,因为“VLookup函数无法在指定的查找范围内找到指定的查找值”,或类似的东西。

查找失败的原因与任何VLOOKUP可能失败的原因相同:验证lookup_value中确实存在lookup_range。注意前导和/或尾随空格以及“文本格式”列。换句话说,假设您想要在查找失败时抛出运行时错误,这是一个数据问题,而不是代码问题。