如何在UDF中使用数组元素作为参数?

时间:2013-12-11 17:29:19

标签: excel-vba vba excel

此函数完全按预期工作,但如果我将'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

1 个答案:

答案 0 :(得分:1)

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

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"))

为:

Range("Skills_Tables_DMs")

虽然在这种情况下它并不是真正重要(因为任何一种形式都可以使用),你应该注意两者不相等:在第一种情况下,额外的括号会导致对范围的值,产生Variant数组,但第二个产生Range个对象。您可以通过比较这两个来在VB编辑器的立即窗格中看到这一点:

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