我有一个电子表格,该电子表格使用常规的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)
但是这给了我一个语法错误。我已经看了一个小时了,尝试更改许多小事情,但是我根本无法使它工作。也许这很愚蠢,但是任何人都可以在这里看到我在做什么错吗?
答案 0 :(得分:1)
如果您需要在单元格中使用公式,也可以在E2单元格中简单地编写类似的内容
= VLOOKUP(1,'D:[archive.xlsx] Sheet1'!$ A $ 1:$ L $ 2000,5,FALSE)
如果要使其与VBA一起使用,可以执行以下操作:
Sub Vlookup()
Range("E2").FormulaR1C1 = "=VLOOKUP(1,'D:\[archive.xlsx]Sheet1'!R1C1:R2000C12,5,FALSE)"
Application.Calculate
Range("E2").Value = Range("E2").Value
End Sub
只需更改文件路径
答案 1 :(得分:1)
如果在电子表格中应用此功能=VLOOKUP(A2,[archive.xlsx]watchlist!A2:L2000,5,FALSE)
,然后关闭工作簿archive.xlsx
,您将看到“功能”中的路径变为“文件的完整路径”。
将变成类似这样的东西:
=VLOOKUP(A2,'C:\-------\[archive.xlsx]watchlist'!A2:L2000,5,FALSE)
现在在VBA中,我认为您应该使用具有完整路径的函数,如下所示:
Range("E2").Formula = "=Vlookup(" & Range("A2") & ",'C:\-----\[archive.xlsx]watchlist'!A2:L2000,5,FALSE)"
答案 2 :(得分:1)
由于多种原因,您不能使用该语法。首先,那不是访问范围的正确语法。另外,这也无法传递archive.xlsx (这不是变量!)。您需要获取路径(与当前工作簿的路径相同,因为它们位于同一位置),并且然后建立正确的字符串引用,如下所示:< / p>
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]监视列表'!A2:L2000,5,FALSE)
这是我们在VBA中需要使用的路径和字符串模式。现在我们如何得到它?由于我们知道该文件夹与您当前的工作簿在同一文件夹中,因此我们调用.Path
函数来获取该位置,然后我们可以构建上面具有的查找字符串的精确副本。 这就是代码的作用!