首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在VBA中获取“无效的过程调用或参数”错误

在VBA中获取“无效的过程调用或参数”错误
EN

Stack Overflow用户
提问于 2019-04-22 00:23:47
回答 1查看 117关注 0票数 0

我是vba的新手,我遇到了一些问题。

我想从另一个工作表中查找一些内容,并将匹配值复制到另一个单元格

VBA说这是最后一个有问题的代码。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2019-04-22 01:10:58

你的VLOOKUP公式:

代码语言:javascript
复制
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类型(以防止类型溢出错误):

代码语言:javascript
复制
Dim nextRefRec As Integer
Dim i As Integer
Dim ListNo As Integer

并更改这一行:

代码语言:javascript
复制
Cells(nextRefRec, 7).Value = Application.WorksheetFunction.VLookup(Worksheets("Rental History").Cells(nextRefRec, 4), Worksheets("Book List").Cells("B4:C24"), 6, False)

(除了像上面提到的那样修改VLOOKUP参数之外):

代码语言:javascript
复制
Cells(nextRefRec, 7).Value = Application.VLookup(Worksheets("Rental History").Cells(nextRefRec, 4), Worksheets("Book List").Cells("B4:C24"), 6, False)

因此,如果VLOOKUP返回#N/A或其他错误,则可以将错误值写入单元格,而不是中断宏。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55784517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档