我有一行基本上看起来像这样的VBA代码:
MyControls.Add(Factory.CreateMyControl(param1, param2))
其中Factory.CreateMyControl
只是一种偷偷摸摸的方式,允许我的类模块的新实例返回一个构造函数。
几周以来它一直没有任何问题。突然间,它开始抛出错误object doesn't support this property or method
这让我感到困惑,因为一切看起来都像是。
在进入并完成代码之后,我最终将其缩小到上面的行,并找到了问题。问题是围绕Add函数的参数的一对括号。当我将代码更改为以下内容时:
MyControls.Add Factory.CreateMyControl(param1, param2)
它在意外休息之前一直有效。
我现在明白这是VBA中用于调用带有参数的Sub
的基本语法:简单地以逗号分隔的方式包含所有参数而不带任何括号(除非你是'将Function
的返回值设置为另一个变量或将其值用于其他目的)。
我真正的问题是,为什么突然停止工作呢? 在Office 2007中使用VBA的常见情况是曾经在没有警告的情况下破解的代码吗? 或者这可能是由我不知情的某种补丁造成的?
答案 0 :(得分:0)
如果使用括号,则默认情况下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