2013-12-11 45 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 –

相關問題