首页 > 解决方案 > 从不同的工作簿执行 Vlookup

问题描述

我正在尝试使用 VBA 进行 vlookup。参考数据在另一个工作簿中。
我正在考虑为数据工作簿和工作表分配一个变量,但无法使其工作。子运行,但不会在所需的工作表中返回任何结果。

WbVlookup是 vlookup 数据工作簿的变量
BuildplanRange是 vlookup 数据范围的变量
代码需要从第 14 行运行到最后一个结果行

在我看来,工作簿和数据范围的变量都没有正确分配,但我无法弄清楚出了什么问题。

Sub VlookupForColumnGHIJ()

Dim EndofRow As Long
Dim RowX As Integer
Dim WbVlookup As Workbook
Dim BuildplanRange As Range

Set WbVlookup = Workbooks.Open("C:\Users\DengSilin\Downloads\Copy of 98289 (FL512S)_Allocation File_WW18 (002)_Cindy_02022021.xlsx")
Set BuilPlanRange = WbVlookup.Worksheets("Build Plan").Column("F:I")

EndofRow = Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
For RowX = 14 To EndofRow
    Cells(RowX, 6) = Application.WorksheetFunction.VLookup(Cells(RowX, 3), BuilPlanRange, 2, 0)
Next RowX

End Sub

标签: excelvbavlookup

解决方案


您的代码正在假设哪个工作簿是Active. 我的建议是养成一种习惯,始终完全参考您的工作簿和工作表,这样可以节省大量时间来追踪错误。

所以你的代码以

Dim WbVlookup As Workbook
Dim BuildplanRange As Range
Set WbVlookup = Workbooks.Open("C:\Users\DengSilin\Downloads\Copy of 98289 (FL512S)_Allocation File_WW18 (002)_Cindy_02022021.xlsx")
Set BuilPlanRange = WbVlookup.Worksheets("Build Plan").Column("F:I")

这是非常明确和明确的。但接下来,您将引用Cells

EndofRow = Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row

Cells这种情况下,默认情况下引用当前ActiveWorkbook。因为您刚刚打开了WbVlookup工作簿,所以这很可能是您的活动工作簿。我猜这不是你想要的。

因此,对此进行快速更改可能会奏效

Dim wb As Workbook
Dim ws As Worksheet
Set wb = Thisworkbook
Set ws = wb.Sheets("IwantThisSheet")

Dim EndofRow As Long
With ws
    EndofRow = .Cells(.Rows.Count, 1).End(xlUp).Row
    For RowX = 14 To EndofRow
        .Cells(RowX, 6) = Application.WorksheetFunction.VLookup(.Cells(RowX, 3), _
                                                             BuilPlanRange, 2, 0)
    Next RowX
End With

推荐阅读