我有一个电子表格,它使用常规 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/