【问题标题】:Why aren't parentheses required for add method of dictionary class?为什么字典类的 add 方法不需要括号?
【发布时间】:2013-10-08 05:03:19
【问题描述】:

字典类的add方法的VBA语法如下:

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

但实际上包含这些括号会产生语法错误。

所以如果 D 是字典类型的对象,那么 vba 期望: D.添加“key1”、“value1”

而不是:

D.Add("key1", "value1")

将 Add 方法与 Exists 进行对比:

Dictionary.Exists (Key as String)

括号实际上是预期的:

V1 = D.Exists("key1")

那么为什么 Add 语法指定了 (),但实际上并不期望它们(如果使用它们甚至会产生错误),而 Exists 语法指定它们并且确实期望它们?

【问题讨论】:

  • 我认为 VBA 使用与 VBScript 相同的规则。看到这个:stackoverflow.com/questions/5413765/…
  • 您刚刚给出的示例说如果 sub 没有参数,则不要使用 (),但如果有参数,则使用 ()。在上面的 Add 示例中,有参数 key1、value1。因此,根据该示例应该可以预期 (),对吧?

标签: vba dictionary excel-2007


【解决方案1】:

在 VBA 中,如果您使用参数调用 Sub,您可以使用以下任一方法调用它:

YourSub Parameter1

Call YourSub(Parameter1)

请注意,YourSub (Parameter1) 实际上会将 Parameter1 转换为字符串,然后将其交给 YourSub - 这肯定不是您想要的!!!

如果它是一个函数,你会调用它:

result = YourFunction(Parameter1)

如果是 Dictionary 对象,.Add 是一个方法/子,即你使用dict.Add Key, Value,而.Exists 是一个函数,所以你需要使用if dict.Exist(Key)...

【讨论】:

  • 感谢您澄清 subs 与函数。这似乎回答了这个问题。我会在 5 分钟内标记为已回答。愚蠢的时间延迟。 :-)
  • 那么,为什么语法不指定:Dictionary.Add Key, Value 告诉程序员不要使用 () 代替 Dictionary.Add (Key, Value)?
  • 我最喜欢的解释是这个Daily Dose of Excel post
  • 感谢道格的参考。
  • @PeterAlbert:显然 motobit 参考是错误的。 MSDN 的版本没有 () 的添加 -- msdn.microsoft.com/en-us/library/aa265006%28v=vs.60%29.aspx 希望我首先看到这个参考。本来可以让我免于开始整个对话。
猜你喜欢
  • 2022-11-10
  • 2014-08-09
  • 2019-10-27
  • 2011-06-08
  • 2021-05-23
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
相关资源
最近更新 更多