gpt4 book ai didi

vba - WorksheetFunction 错误子或函数未定义

转载 作者:行者123 更新时间:2023-12-03 02:30:11 26 4
gpt4 key购买 nike

我想知道是否有人可以帮助我。我创建了一个非常简单的用户表单来记录信息。然而,我的问题是,当其中一个字段为空时,我收到一条错误消息:

Sub or Function not defined.

Private Sub CommandButton1_Click()

Dim iRow As Long
Dim ws As Worksheet
Set ws = Worksheets("Data")

'find first empty row in database
iRow = ws.Cells.Find(What:="*", SearchOrder:=xlRows, _
SearchDirection:=xlPrevious, LookIn:=xlValues).Row + 1

'check for a Name number
If Trim(QueryType.Value) = "" Then
QueryType.SetFocus
MsgBox "Please complete the form"
Exit Sub
End If

'copy the data to the database
ws.Cells(iRow, 1).Value = Format(Now, "DD/MM/YYYY")
ws.Cells(iRow, 2).Value = Format(Now, "HH:MM")
ws.Cells(iRow, 3).Value = Application.UserName
ws.Cells(iRow, 4).Value = CType.Value
ws.Cells(iRow, 5).Value = IName.Value
ws.Cells(iRow, 6).Value = QType.Value
ws.Cells(iRow, 7).Value = 1
ws.Cells(iRow, 8).Value = Format(Date, "MMM-YY")
'ws.Cells(iRow, 9).Value = Application.WorksheetFunction.VLookup(InternalName.Value, Sheet2.Range("C1:D23"), 2, 0)
'ws.Cells(iRow, 9).Value = Application.WorksheetFunction.IfError(VLookup(InternalName.Value, Sheet2.Range("C1:D23"), 2, 0), "")
ws.Cells(iRow, 10).Value = Application.WorksheetFunction.VLookup(InternalName.Value, Sheet2.Range("C1:E23"), 3, 0)
ws.Cells(iRow, 11).Value = "IB"

Unload Me

MsgBox "Data added", vbOKOnly + vbInformation, "Data Added"

End Sub

问题出在我收到错误的任一注释掉的行中。仅当我将下拉框留空时我才会收到。如果填充则不会发生错误。我可以轻松地为“不适用”添加一个额外的菜单选项,但宁愿它只是空白。请问有人有什么建议吗?

最佳答案

三件事。

1- VLookup本身不是一个 VBA 函数,它是 Application 的成员方法对象或 WorksheetFunction目的。所以你应该符合 VLookup 的资格通过任一方法,即使您将其放在另一个方法中,例如 WorksheetFunction.IfError(...)

ws.Cells(iRow, 9).Value = 
WorksheetFunction.IfError(WorksheetFunction.VLookup(InternalName.Value, Sheet2.Range("C1:D23"), 2, 0), "")
' ^^^^^^^^^^^^^^^^^^

2- WorksheetFunction 中的相同方法并在 Application对象的工作方式不同。在前者中,如果结果错误(例如:与搜索值不匹配),VBA 中会引发错误。在后者中,不会引发错误,但返回值是 Error Variant 。后一种形式通常对于 VBA 来说更安全,因为您不需要一些 On Error Resume Next左右,但你可以用 If(IsError(result)) 检查结果。

3- 当您的搜索条件为空或不匹配时,您会因使用WorksheetFunction.VLookup而引发错误(根据2)。如果您的目的只是设置结果值并继续,您可以使用 Application.VLookup相反:

ws.Cells(iRow, 9).Value = Application.IfError(Application.VLookup(InternalName.Value, Sheet2.Range("C1:D23"), 2, 0), "")

附:我个人更喜欢Application.大多数时候。有些人更喜欢 WorksheetFunction主要是因为它提供了 Intellisense,但我发现这非常无用,因为 Intellisense 中方法的参数是未命名和无类型的,即 VLookup(arg1, arg2, arg3, [arg4]) ..(对我来说毫无意义)。

关于vba - WorksheetFunction 错误子或函数未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43934854/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com