excel - 从不同的工作簿执行 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
解决方案
您的代码正在假设哪个工作簿是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
推荐阅读
- python - 应用于列时,带有 lambda 函数的 Pandas 数据框错误
- c# - 轮廓的 arcLength 的结果是什么?
- python - 无法导入名称 getoutput
- javascript - 复选框 jquery - 多个条件
- javascript - 程序不工作的脚本代码 [高中生]
- python - 如何遍历列并在 Pandas 中只返回一个变量
- javascript - 创建子组件后如何将数据从父组件传递给子组件?
- import - 导入 MapiMessage 会给出 KeyError: 'aspose.email'
- python-3.x - multiprocessing.Pool.map 函数在全局命名空间中看不到变量
- javascript - jQuery 选择器找不到我的