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

我试图在VBA中编写一个引用另一个文件的VLookup Table。 这是我的目标的一个简单的概述:

  • 在另一个Excel文件中查找单元格A2中的值
  • 从其他Excel文件的第2列中提取信息并放入单元格B2中
  • 移到单元格A3并重复该过程,直到A列中没有剩余条目

这是我已经有的代码。 我不断收到一个错误,说:“无法获取WOrksheetFunction类的VLookup属性。 我检查了引用该错误的其他post,但他们没有任何帮助。 你们都看到我的代码中的错误? 还是有人有更好的方式来完成这项任务?

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 

当您打开工作簿时,它将成为活动工作簿。 看来你从来没有把控制权交还给目标工作簿。

 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 

请参阅如何避免使用Excel中的selectVBAmacros来获取更多的方法来摆脱依靠select和activate来实现您的目标。

这取决于你是否打算这样做一次或重复。 我一再假设手动这样做并不是那么困难。

我首先要看的是你的论点。 前两个应该是范围。 所以要清楚,也许你可以做类似的事情

 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函数的范围。