在VBA中使用VLookup引用另一个Excel文件

时间:2015-09-23 15:51:29

标签: excel vba vlookup

我正在尝试在VBA中编写一个引用另一个文件的VLookup表。以下是我的目标的简单概述:

  • 在另一个Excel文件中查找单元格A2中的值
  • 从另一个Excel文件的第2列中提取信息并放入Cell B2
  • 转到单元格A3并重复此过程,直到A列中不再有任何条目

这是我已经拥有的代码。我一直收到一条错误,上面写着“无法获取WOrksheetFunction类的VLookup属性”。我检查了引用该错误的其他帖子,但他们没有任何帮助。你们都看到我的代码中有错误吗?或者有没有人有更好的方法来完成这项任务?

Sub SBEPlannerAdder()

Dim wbk As Workbook
Set wbk = Workbooks.Open("C:\Users\user\Documents\Support File\Planner.xlsx")

With Sheets("Sheet1")

    ' Selects the first cell to check
    Range("A2").Select
    Dim x As Variant
    x = wbk.Worksheets("Sheet1").Range("A1:C1752")

    ' Loops through all rows until an empty row is found
    Do Until IsEmpty(ActiveCell)

        Range(ActiveCell.Offset(0, 1) & ActiveCell.Row).Value = Application.WorksheetFunction.VLookup((ActiveCell.Column & ActiveCell.Row), x, 2, 0)
        ActiveCell.Offset(1, 0).Select
    Loop
End With

Call wbk.Close(False)
End Sub

2 个答案:

答案 0 :(得分:3)

当您打开工作簿时,它将成为活动工作簿。看起来你从未将控制权传回目标工作簿。

Sub SBEPlannerAdder()
    Dim rw As Long, x As Range
    Dim extwbk As Workbook, twb As Workbook

    Set twb = ThisWorkbook
    Set extwbk = Workbooks.Open("C:\Users\user\Documents\Support File\Planner.xlsx")
    Set x = extwbk.Worksheets("Sheet1").Range("A1:C1752")

    With twb.Sheets("Sheet1")

        For rw = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
            .Cells(rw, 2) = Application.VLookup(.Cells(rw, 1).Value2, x, 2, False)
        Next rw

    End With

    extwbk.Close savechanges:=False
End Sub

有关远离依赖选择和激活以实现目标的更多方法,请参阅How to avoid using Select in Excel VBA macros

答案 1 :(得分:0)

这取决于您是打算一次性还是反复执行此操作。我反复假设,因为手动这样做并不是那么困难。

我要看的第一件事是你的论点。前两个应该是范围。所以要明确,也许你可以做类似

的事情
Dim x As Range
set x = wbk.Worksheets("Sheet1").Range("A1:C1752")
...

Range(ActiveCell.Offset(0, 1) & ActiveCell.Row).Value = Application.WorksheetFunction.VLookup(Range(Activecell.Address), x, 2, 0)

重要的一点是确保前两个参数是Vlookup函数的范围。