我在编写Excel的VBA宏时遇到语法选项问题。在VBA中,你可以调用对象的方法有两种不同的方式:语法选项在VBA Macro for Excel中创建错误
foo.bar(arg1, arg2)
或
foo.bar arg1, arg2
我绝对讨厌第二类语法的,因为我觉得它缺乏任何形式的清晰度,所以我通常坚持第一种选择。但是,我遇到过使用第一个选项创建错误,而第二个执行正常的情况。 (这也许是在我的代码其它问题的指标。)这是罪魁祸首代码:
Function GetFundList() As Collection
Dim newFund As FundValues
Range("A5").Select
Set GetFundList = New Collection
While Len(Selection.Value)
Set newFund = New FundValues
' I set the fields of newFund and move Selection
的问题是在这下一行:
GetFundList.Add newFund
Wend
End Function
FundValues是我创建了一个类本质上只是一个结构;它有三个在循环过程中设置的属性。
基本上,当我打电话GetFundList.Add(newFund)
我得到以下错误:
运行时错误“438”: 对象不支持此属性或方法
但调用GetFundList.Add newFund
是完全正常的。
有没有人了解VBA的错综复杂,足以解释为什么会发生这种情况?
编辑:非常感谢解释!
这将是正确的。在我VBA中,我通常会调用函数来返回执行例程的值和子集(如果您想将值分配给主子变量,仍然可以通过ref发送参数)。 Indd,如果您调用返回值的函数,则始终使用括号。 – Trace 2012-07-30 16:32:47
+1,但当天票数不足。 : - / – Gaffi 2012-08-13 16:15:44