【问题标题】:Word/Excel Vba vlookup "Subscript out of range" errorWord/Excel Vba vlookup“下标超出范围”错误
【发布时间】:2016-08-31 22:29:40
【问题描述】:

我正在尝试使用 vlookup 从 word 文档中读取字符串并从 excel 表中返回相应的值。我似乎在 vlookup 函数上收到“下标输出或范围”错误。

这是我正在查看的工作表: Sample Data

我的代码是:

Sub Autofill()
Dim oExcel As New Excel.Application
Dim testdb As Excel.Workbook
Dim testvar1 As Double

Set testdb = oExcel.Workbooks.Open("k:\SIF\Vibration\Dbase.xlsm")

testvar1 = oExcel.WorksheetFunction.VLookup("Roger", testdb.Sheets("Main").Range("A1:C4"), 2, False)

MsgBox (testvar1)

End Sub

我也尝试使用 Application.Vlookup 函数,但无济于事。遇到同样的错误。

【问题讨论】:

  • 这是在黑暗中拍摄的,但您是否尝试过将 oExcel 声明为 Excel.Application?在设置 testdb 之前添加这个,设置 oExcel = new Excel.Application
  • 如果工作表的名称 Main 在 Dbase.xlsm 文件中不存在,您可能会收到此错误。也许有额外的空间或其他东西,检查准确性。我模拟了你的代码,看起来没问题。可能存在问题的一件事是,如果您希望返回一个字符串,您可能希望将 testvar1 更改为 String 而不是 Double。
  • 我怀疑您收到错误是因为您的 Vlookup 返回错误(因为未找到),如果您的 Vlookup 不成功,您需要添加错误处理,请参阅链接:stackoverflow.com/questions/18063214/…
  • 我认为您需要在 open() 之后和 .vlookup 之前 activate excel 窗口。根据我的经验

标签: vba excel ms-word


【解决方案1】:

这个脚本对我有用。确保 Main 选项卡存在,这就是我复制错误的方式。

VLookup 中的缺失值会给您“无法获取 Vlookup 属性...”错误。

【讨论】:

  • 我在工作簿中的工作表名称和代码相同,工作簿没有隐藏。仍然没有使用 oExcel.Workbooks.Open(),所以我用 GetObject() 替换它并且它工作。你能知道为什么会发生这种情况吗?
  • 老实说,如果不能亲身体验,我不确定(我很想体验)。我有几个长镜头是有一个未发布的 COM 对象 VBA 没有从内存中释放,或者它可能是环境的。或许工作簿中有workbook_open()进程?
猜你喜欢
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-02
  • 1970-01-01
相关资源
最近更新 更多