括号的存在突然导致代码中断
我有一行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