2013-12-11 40 views
0

该函数完全按照预期工作,但如果我用'Merc(98)'作为参数替换'Rank',我会收到一条错误消息Compile error: Expected:)。我究竟做错了什么?如何在UDF中使用数组元素作为参数?

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 
+0

你在哪里更换,在函数定义,比如'功能RankDMs(WhichTable,芝加哥商业交易所(98))'或当你调用该函数? –

+0

在定义中。我是否认为这可能是问题? –

+1

'Merc(98)'将随后排列99个元素。你需要传递一个参数,它将是一个数组。这是你怎么想的?因为接下来你不使用对数组项的正确引用。 –

回答

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  
+0

非常感谢。经过试验你的代码,我现在可以按我想要的方式工作,但更重要的是,我明白我做错了什么 - 我很困惑定义函数并调用它。 +1 –

相关问题