括号的出现突然导致代码中断

时间:2015-04-23 18:24:59

标签: excel vba excel-vba excel-2007 office-2007

我有一行基本上看起来像这样的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的常见情况是曾经在没有警告的情况下破解的代码吗? 或者这可能是由我不知情的某种补丁造成的?

1 个答案:

答案 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