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

时间:2019-07-27 13:34:32

标签: 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)

但是这给了我一个语法错误。我已经看了一个小时了,尝试更改许多小事情,但是我根本无法使它工作。也许这很愚蠢,但是任何人都可以在这里看到我在做什么错吗?

3 个答案:

答案 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函数来获取该位置,然后我们可以构建上面具有的查找字符串的精确副本。 这就是代码的作用!