2013-10-01 51 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/)。 –

相关问题