Excel 如何在UDF中将数组元素用作参数?

Excel 如何在UDF中将数组元素用作参数?,excel,vba,Excel,Vba,此函数完全按照预期工作,但如果我将“Rank”替换为“Merc(98)”作为参数,我会收到一条错误消息,Compile error:Expected:)。我做错了什么 UDF to lookup DMs on Skills_Tables_DMs table Function RankDMs(WhichTable, Rank) RankDMs = WorksheetFunction.HLookup(WhichTable, (Range("Skills_Tables_DMs")), (R

此函数完全按照预期工作,但如果我将“Rank”替换为“Merc(98)”作为参数,我会收到一条错误消息,
Compile error:Expected:)
。我做错了什么

UDF to lookup DMs on Skills_Tables_DMs table
  Function RankDMs(WhichTable, Rank)
    RankDMs = WorksheetFunction.HLookup(WhichTable, (Range("Skills_Tables_DMs")), (Rank + 1), False)
  End Function

如果下面的内容没有帮助,那么您需要更详细地解释您正在尝试做什么,或者(更好地)包含更多相关代码

Sub Tester()
'...
Dim rv
'...
    rv = RankDMs(someValueHere, 5)
    'or
    rv = RankDMs(someValueHere, Merc(98))
'...
End Sub


Function RankDMs(WhichTable, Rank)
    RankDMs = WorksheetFunction.HLookup(WhichTable, _
                  Range("Skills_Tables_DMs"), (Rank + 1), False)
End Function
注:我改变了这一点:

(Range("Skills_Tables_DMs"))
致:

虽然在这种情况下这不是很关键(因为两种形式都可以),但您应该注意,这两种形式并不等效:在第一种情况下,额外的括号会导致对范围值的求值,从而产生一个变量数组,但第二种情况会导致一个
范围
对象。通过比较这两个选项,您可以在VB编辑器的即时窗格中看到这一点:

? typeName((Range("A1:A5")))   ' >> Variant()
? typeName(Range("A1:A5"))     ' >> Range    

在函数定义中,如
函数RankDMs(WhichTable,Merc(98))
或在调用函数时,在定义中替换何处。我认为这可能是问题所在,对吗?
Merc(98)
将是一个包含99个元素的数组。您需要传递一个参数,它将是一个数组。你是这样想的吗?因为接下来您没有使用对数组项的正确引用。不,我使用Merc(98)作为数组的第99个元素。我当然不想传递(几乎)整个数组的任何引用。您能澄清一下您的陈述“因为接下来您没有正确引用数组项”吗?@KazJaw。谢谢,请接受以上评论的+1。非常感谢。在对你的代码进行了实验之后,我现在可以让我的代码按照我希望的方式工作,但更重要的是,我理解我做错了什么——我混淆了定义函数和调用它+1.
? typeName((Range("A1:A5")))   ' >> Variant()
? typeName(Range("A1:A5"))     ' >> Range