WorksheetFunction错误子或函数未定义

时间:2017-05-12 09:59:47

标签: vba excel-vba compiler-errors worksheet-function excel

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

  

Sub或Function未定义。

# coding: utf-8
x = u'LÄCHERLICH'
print x.lower().encode('utf8')

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

1 个答案:

答案 0 :(得分:3)

三件事。

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- WorksheetFunctionApplication个对象中的相同方法的工作方式不同。在前者中,如果结果是错误(例如:搜索值不匹配),则在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), "")

P.S。我个人更喜欢Application.。有些人更喜欢WorksheetFunction,主要是因为它提供了Intellisense,但我觉得它很无用,因为Intellisense中方法的参数是未命名和无类型的,即VLookup(arg1, arg2, arg3, [arg4]) ..(对我来说没有意义)。< / p>