我是vba的新手,我遇到了一些问题。
我想从另一个工作表中查找一些内容,并将匹配值复制到另一个单元格
VBA说这是最后一个有问题的代码。
Private Sub ReferenceOk_Click()
Dim nextRefRec As Integer
Dim i As Integer
Dim ListNo As Integer
ListNo = ListBoxBook.ListIndex
If ListNo < 0 Then
MsgBox "Please select any book"
Exit Sub
End If
Sheets("Rental History").Activate
nextRefRec = Cells(Rows.Count, 2).End(xlUp).Row + 1
For i = 0 To 1
Cells(nextRefRec, i + 3).Value = ListBoxBook.List(ListNo, i)
Next i
Cells(nextRefRec, 3).NumberFormat = "0000"
Cells(nextRefRec, 2).NumberFormat = "00000"
Cells(nextRefRec, 2).Value = TxtMemberNo.Value
Cells(nextRefRec, 5).Value = Date
Cells(nextRefRec, 6).Value = Date + TxtRentalDays.Value
Cells(nextRefRec, 7).Value = Application.WorksheetFunction.VLookup(Worksheets("Rental History").Cells(nextRefRec, 4), Worksheets("Book List").Cells("B4:C24"), 6, False)
End Sub
发布于 2019-04-22 01:10:58
你的VLOOKUP公式:
VLookup(Worksheets("Rental History").Cells(nextRefRec, 4), Worksheets("Book List").Cells("B4:C24"), 6, False)
似乎是无效的。
范围Worksheets("Book List").Cells("B4:C24")
包含2列,但您的第三个参数是6
。换句话说,您正在尝试获取2列范围中的第6列(这显然不存在)。所以目前它可能会返回一个#REF
错误。
如果需要,有关VLOOKUP
的更多信息,请访问:https://support.office.com/en-us/article/vlookup-function-0bbc8083-26fe-4963-8ab8-93a18ad188a1
修正您的VLOOKUP
公式,以便您传递的列至少存在于您作为第二个参数传递的范围内。
另外,我建议将这些变量声明为Long
类型(以防止类型溢出错误):
Dim nextRefRec As Integer
Dim i As Integer
Dim ListNo As Integer
并更改这一行:
Cells(nextRefRec, 7).Value = Application.WorksheetFunction.VLookup(Worksheets("Rental History").Cells(nextRefRec, 4), Worksheets("Book List").Cells("B4:C24"), 6, False)
(除了像上面提到的那样修改VLOOKUP
参数之外):
Cells(nextRefRec, 7).Value = Application.VLookup(Worksheets("Rental History").Cells(nextRefRec, 4), Worksheets("Book List").Cells("B4:C24"), 6, False)
因此,如果VLOOKUP
返回#N/A
或其他错误,则可以将错误值写入单元格,而不是中断宏。
您的代码隐含地引用了代码运行时恰好处于活动状态的任何工作表。尝试引用父工作簿和工作表(以防活动的工作表不是您认为的工作表)。
https://stackoverflow.com/questions/55784517
复制相似问题