括号的存在突然导致代码中断

我有一行VBA代码,基本上是这样的:

MyControls.Add(Factory.CreateMyControl(param1, param2)) 

其中Factory.CreateMyControl只是一个偷偷摸摸的方式,让我的类模块的新实例返回有一个构造函数。

这几个星期没有任何问题。 突然间,它开始抛出错误object doesn't support this property or method是莫名其妙的,因为一切看起来像它总是有。

在进入并通过代码后,我终于缩小到上面的行,并发现了这个问题。 问题是围绕Add函数的参数的一对括号。 当我将代码更改为以下内容时:

 MyControls.Add Factory.CreateMyControl(param1, param2) 

它的工作就像在意外的rest之前一样。

我现在明白,这是VBA调用Sub的参数的基本语法:简单地以逗号分隔的方式包含所有参数,没有任何括号(除非您将Function的返回值设置为另一个variables或使用这是其他用途的价值)。

我真正的问题是,为什么突然停止工作?
在Office 2007中使用VBA的情况经常发生,代码曾经在没有警告的情况下破解了吗?
或者,这可能是由我不知道发生的某种补丁造成的?

用括号括起来,每个默认的Sub参数都通过ByVal而不是ByRef 。 没有括号,默认是ByRef

例:

 Dim r As Range Sub test(v As Variant) MsgBox TypeName(v) End Sub Sub main() Set r = Range("A1") test r 'ByRef; TypeName is Range test (r) 'ByVal; TypeName is not Range but the type of the content of A1 End Sub