如何使用vlookup vba访问已关闭的Excel工作簿

时间:2015-08-05 05:06:38

标签: excel vba excel-vba

我正在尝试创建一个Excel VBA宏,它使用VLOOKUP访问已关闭工作簿中的一系列单元格。我不太擅长使用VBA编辑器,但它似乎没有显示有关错误的大量有用信息。

Sub WorkBookWithData()
    Dim currentWb As Workbook
    Set currentWb = ThisWorkbook
    Dim currentWs As Worksheet
    Set currentWs = currentWb.Sheets(1)
    Dim strFormula As String
    strFormula = "=VLOOKUP(currentWs.Range("B2"),'Macintosh HD:Users:myself:Documents:l[Master_Terms_Users.xlsm]Master_Terms_Users.csv'!A1:B222,2,false)"
    currentWs.Range("C2").Formula = strFormula

End Sub

Excel VBA编辑器挂在" strFormula =" = VLOOKUP ..."部分。

由于

2 个答案:

答案 0 :(得分:2)

来自Siddharth Rout's评论的参考。

代码中的主要问题是这一行:

strFormula = "=VLOOKUP(currentWs.Range("B2"),'Macintosh HD:Users:myself:Documents:l[Master_Terms_Users.xlsm]Master_Terms_Users.csv'!A1:B222,2,false)"

因为代码currentWs.Range("B2")。我们知道您要指出当前表格(同一张表格)的范围(" B2")。所以,你可以使用如下:

strFormula = "=VLOOKUP(B2,'Macintosh HD:Users:myself:Documents:l[Master_Terms_Users.xlsm]Master_Terms_Users.csv'!A1:B‌​222,2,false)"

为什么呢?它只能使用B2,因为您将公式设置为同一工作表中的单元格。因此,无需指明工作表名称

如果要设置来自其他工作表的单元格,则需要在该情况下指明工作表名称。所以,应该使用如下:

strFormula = "=VLOOKUP(" & currentWs.name & "!B2,'Macintosh HD:Users:myself:Documents:l[Master_Terms_Users.xlsm]Master_Terms_Users.csv'!A1:B222,2,false)"

答案 1 :(得分:0)

这看起来与我之前的情况完全不同,但它确实有用。

Sub Check_Master_Values()

    Dim newCurWb As Workbook
    Set newCurWb = Workbooks(2)
    newCurWb.Activate

    newCurWb.Sheets(1).Range("C2").Formula = "=VLOOKUP(B2,'Macintosh HD:Users:myself:Documents:[Master_Terms_Users.xlsm]Master_Terms_Users.csv'!$A$1:$B$269,2,FALSE)"

End Sub

在我的第一次尝试中,我没有遵循从工作簿,工作表到范围的分配链。正如你在这段代码中看到的那样,我对一个新的工作簿进行了朦胧 - 然后是大麻烦,我需要将它分配给正确的打开工作簿。然后,我激活了工作簿,最后访问了Sheets对象和Range。

我现在也知道我的工作簿选择号将根据打开的其他工作簿的数量而有所不同。 ThisBook无法正常工作,因为在这个过程中,ThisBook引用的工作簿发生了变化。这可能也是为什么我的初始代码不起作用,除了VLOOKUP中的不正确编码。

如果有办法明确指定哪个工作簿,那将会很好。

感谢所有在VLOOKUP部分提供帮助的人。