我正在一个工作簿中使用两个不同的工作表。我的任务是从Sheet1中查找产品的型号#,在Sheet2中找到相同的型号#,并获得该产品的成本,该成本位于几列之遥。
自然地,我尝试使用Vlookup,因为该功能足以满足该查询的需求。
我将在下面发布我的代码,然后解释我面临的问题。我是VBA的新手,已经搜索了许多不同的Stack帖子,并尝试了各种解决方案,但无济于事。
Private Sub CommandButton1_Click()
Dim tbdCell As Range
Dim model As Range
Dim cell As Range
Dim PAsheet As Worksheet
Dim DB As Worksheet
Dim target As Variant
Set DB = Worksheets("Database")
Set PAsheet = Sheets("Pricing Agreement")
Set tbdCell = Range("N2:N4700")
On Error GoTo ErrHandler:
For Each cell In tbdCell
Set model = cell.Offset(0, -6)
cell = WorksheetFunction.VLookup((CStr(model)), PAsheet.Range(CStr("C2:D2000")), 6, True)
Next cell
Exit Sub
ErrHandler:
Select Case Err.Number
Case 0
Case 1004
cell = "missing"
Resume Next
Case Else
MsgBox Err.Number & vbNewLine & Err.Description
Exit Sub
End Select
End Sub
因此,在调试和测试后,大多数事情都会起作用,直到我们到达使用Vlookup函数的那一行为止。即使数据存在于另一个电子表格中,我也总是会收到错误1004。因此,我需要填写的单元格始终会填充“缺失”,如上面在错误处理代码中所述。
我尝试使用该功能的应用程序版本。我尝试使用其他变量并将其声明为Variant类型。我甚至尝试将table_array范围设置为仅一行,覆盖2列,以试图强制匹配一个特定的模型#。到目前为止,为避免类型不匹配,我将“ model”(模型#)转换为字符串,并且还将PAsheet中的搜索范围转换为字符串。我尝试的最后一件事是不搜索完全匹配(最后一个参数设置为true)
因此,在预期有关Vlookup所基于的数据的未来问题时,我将提供有关如何格式化两个工作表的必要信息。
您可能需要的信息:
我们从N列开始,在Sheet1(数据库)中缺少价格。
我将模型设置为同一行中的值,即左侧6列(H列)。
使用MsgBox进行测试证明了它对我有用,并且在调试时,模型变量显示了正确的信息,所以这不是问题。
在PAsheet中,模型编号位于C列中。最初,我是从C2:C2000左右创建搜索表的,但是我被认为需要至少两列表才能使Vlookup正常工作,所以我将C2000更改为D2000。现在搜索范围是两列表格。
在PAsheet中,产品成本在H列中,与C列相距5。我需要此值,因此我在column_index参数中输入6。之前是5点,因为我认为您不算第一列,但我已将其修正。
最后,我主要使用“ False”作为最后一个参数进行测试,但是无论哪种方式都无效。
因此,在尝试了两种以上的变体和策略后,我仍然在需要填写的单元格中“丢失”。
那么,我在这里做错了什么?预先感谢。
答案 0 :(得分:2)
如果您尝试从Column C
返回第6个值,则需要将范围更新为`PAsheet.Range(“ C2:H2000”)
cell.Value = WorksheetFunction.VLookup(cell.Offset(, -6), PAsheet.Range("C2:H2000"), 6, False)