Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 工作表函数错误子项或未定义函数_Vba_Excel_Compiler Errors_Worksheet Function - Fatal编程技术网

Vba 工作表函数错误子项或未定义函数

Vba 工作表函数错误子项或未定义函数,vba,excel,compiler-errors,worksheet-function,Vba,Excel,Compiler Errors,Worksheet Function,我想知道是否有人能帮助我。我创建了一个非常简单的用户表单来记录信息。但是,我的问题是,当其中一个字段为空时,我收到一条错误消息: 未定义子或函数 问题出现在我收到错误的其中一个注释掉的行中。只有当我将下拉框留空时,我才会收到。如果已填充,则不会发生错误。我可以很容易地为“不适用”添加一个额外的菜单选项,但我宁愿它只是空白。有人有什么建议吗?三件事 1-VLookup本身不是VBA函数,它是应用程序对象或工作表函数对象的成员方法。因此,即使在另一个方法(如WorksheetFunction.IfE

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

未定义子或函数

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

三件事

1-
VLookup
本身不是VBA函数,它是
应用程序
对象或
工作表函数
对象的成员方法。因此,即使在另一个方法(如
WorksheetFunction.IfError(…)
)中有
VLookup
,您也应该通过这两种方法来限定它

2-在
工作表功能
应用程序
对象中的相同方法工作方式不同。在前者中,如果结果是错误(例如:搜索值不匹配),则在VBA中引发错误。在后者中,不会引发错误,但返回的值是
错误变量
。后一种形式通常对VBA更安全,因为您不需要在下一步恢复错误时执行一些
左右,但您可以使用
If(iError(result))
检查结果

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

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

p、 我个人更喜欢
应用程序。
大多数时候。一些人更喜欢
WorksheetFunction
,主要是因为它提供了Intellisense,但我发现这很没用,因为Intellisense中方法的参数是未命名和未类型化的,即
VLookup(arg1,arg2,arg3,[arg4])
。。(对我来说没有意义)。

调试时哪一行高亮显示?@Kelaref,以下面的为准,9我取消注释。对不起,我应该说。我最初只是把它当作一个小玩意儿。当我得到错误时,我认为Iferror函数可以解决这个问题,但是它会产生相同的结果。
ws.Cells(iRow, 9).Value = 
WorksheetFunction.IfError(WorksheetFunction.VLookup(InternalName.Value, Sheet2.Range("C1:D23"), 2, 0), "")
'                         ^^^^^^^^^^^^^^^^^^
ws.Cells(iRow, 9).Value = Application.IfError(Application.VLookup(InternalName.Value, Sheet2.Range("C1:D23"), 2, 0), "")