excel - VBA 简单 Vlookup 到关闭的工作簿 - 语法错误

标签 excel vba vlookup

我有一个电子表格,它使用常规 Vlookup 函数来访问另一个名为 archive.xlsx 的工作簿中的数据,该工作簿保存在与我的事件工作簿相同的位置。普通/非 VBA 函数如下所示并按预期工作:

=VLOOKUP(A2,[archive.xlsx]watchlist!A2:L2000,5,FALSE)

我正在尝试在 VBA 中重新创建它,目的是能够运行它,而无需手动打开/关闭 archive.xlsx 文件。我对 VBA 不太有经验,所以我查看了这里提出类似问题的其他一些帖子,最后得到了这行代码(适应我自己的公式),显然适用于其他一些用户:

Sub Vlookup()

Range("E2") = Application.Vlookup(Range("A2"),([archive.xlsx]watchlist.Range("A2:L2000")),5,FALSE)

End Sub

(Vlookup结果应转到单元格E2)

但这给了我一个语法错误。我已经看了这个问题大约一个小时了,并尝试改变几十个小东西,但我根本无法让它工作。这可能是非常愚蠢的事情,但有人能看出我在这里做错了什么吗?

最佳答案

由于多种原因,您无法使用该语法。首先,这不是访问范围的正确语法。另外,这也无法传递 archive.xlsx (它不是变量!)。您需要获取路径(与当前工作簿的路径相同,因为它们位于同一位置),然后然后构建正确的字符串引用,如下所示:

Sub Vlookup()

Dim VLPath As String
With ThisWorkbook
    'Now get the full path to the table being looked up in archive.xlsx
    VLPath = "'" & .Path & "\[archive.xlsx]watchlist'!A2:L2000"
    .Range("E2").Formula = "=VLOOKUP(A2," & VLPath & ",5,FALSE)"
End With

End Sub
<小时/>

一些解释:

如果您关闭 archive.xlsx 并检查当前工作簿的单元格 E2 中的公式,它将包含 archive.xlsx 的完整路径,例如:

VLOOKUP(A2,'C:\blah\[archive.xlsx]watchlist'!A2:L2000,5,FALSE)

这是我们需要在 VBA 中使用的路径和字符串模式。现在我们如何得到它?由于我们知道它与当前工作簿位于同一文件夹中,因此我们调用 .Path 函数来获取该位置,然后我们可以构建上面的查找字符串的精确副本。 这就是代码的作用!

关于excel - VBA 简单 Vlookup 到关闭的工作簿 - 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57232627/

相关文章:

windows - 在visual basic中模拟windowskey+L?

Python Pandas 合并关键字/句子

excel - VLOOKUP 产生错误的数字

excel - 宏仅适用于英文 excel 版本

vba - 返回绝对引用号

excel - 选择所有列会导致 Excel 在事件 SelectionChange(相交)中有代码时挂起?

vba - 无法设置 PageSetup 的特定属性

if-statement - VLOOKUP 中的 IFERROR 语句

excel - 减去时间

vba - 将工作表 1 上的行复制到所有现有工作表