2013-10-01 52 views
1

爲字典類的添加方法的VBA語法被給定爲:爲什麼添加字典類的方法不需要括號?

Dictionary.Add (Key as String, Item as Variant) 

但實際上包括這些括號生成語法錯誤。

因此,如果d是類型字典的對象,然後VBA預計: D.Add 「KEY1」, 「值1」

而不是:

D.Add( 「KEY1」,「VALUE1 「)< =這會產生一個錯誤!

對比添加方法與存在:

Dictionary.Exists (Key as String) 

括號實際上是預期:

V1 = D.Exists( 「KEY1」)

那麼,爲什麼是添加語法指定()的,但實際上並不期望它們(甚至在使用它們時會產生一個錯誤),而Exists語法指定它們並且實際上期望它們?

+0

我認爲VBA使用與VBScript相同的規則。看到這個:http://stackoverflow.com/questions/5413765/what-are-the-rules-governing-usage-of-brackets-in-vba-function-calls – HK1

+0

你剛剛給的例子說不使用()如果沒有參數給子,但是如果有參數則使用()。在上面的Add例子中,有參數key1,value1。所以根據這個例子,應該預計(),對嗎? – tgoneil

回答

1

在VBA中,如果調用參數子,你可以把它要麼:

YourSub Parameter1 

Call YourSub(Parameter1) 

注意YourSub (Parameter1)實際上將投參數1爲字符串,然後手它到YourSub - 這當然不是你想要的!

在情況下,它是一個函數,你會稱之爲:

result = YourFunction(Parameter1) 

在Dictionary對象的情況下,.Add是一種方法/子,即使用dict.Add Key, Value,而.Exists是一個函數,所以你需要使用if dict.Exist(Key)...

+0

感謝您澄清subs vs功能。這似乎回答了這個問題。我會在5分鐘內給予答覆。愚蠢的時間延遲。 :-) – tgoneil

+0

那麼,爲什麼沒有指定語法:Dictionary.Add Key,Value告訴程序員不要使用()而不是Dictionary.Add(Key,Value)? – tgoneil

+1

我最喜歡的解釋是[每日劑量的Excel後](http://dailydoseofexcel.com/archives/2012/05/01/quick-vba-tip-parentheses/)。 –

相關問題