从不同的工作簿执行 Vlookup
Performing Vlookup from different workbook
我正在尝试使用 VBA 进行 vlookup。参考数据在另一个工作簿中。
我正在考虑为数据工作簿和工作表分配一个变量,但无法使其工作。子 运行,但不会 return 在所需的工作表中产生任何结果。
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
您的代码正在假设哪个工作簿是 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
我正在尝试使用 VBA 进行 vlookup。参考数据在另一个工作簿中。
我正在考虑为数据工作簿和工作表分配一个变量,但无法使其工作。子 运行,但不会 return 在所需的工作表中产生任何结果。
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
您的代码正在假设哪个工作簿是 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