首页 > 解决方案 > 在 VBA 中出现“无效的过程调用或参数”错误

问题描述

我是 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

标签: vbavlookupuserform

解决方案


您的 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或出现其他错误,则可以将错误值写入单元格,而不是中断您的宏。

您的代码隐含地引用了代码运行时恰好处于活动状态的任何工作表。尝试参考父工作簿和工作表(如果处于活动状态的工作表不是您认为的工作表)。


推荐阅读