不能使用类对象作为其他类的方法
我是新来的VBA的说法而感到惊讶,它没有正式的动态数组,所以我试图做一个简单的一个适合我的需求:不能使用类对象作为其他类的方法
Public count As Integer Private max As Integer Private storage(1 To 5) As DVprogram Private Sub class_initialize() count = 0 max = 5 End Sub Public Sub add(data As DVprogram) If (count + 1) > max Then updateSize (max + 5) End If storage(count + 1) = data count = count + 1 End Sub 'more code...
当我尝试调用add时,出现错误“对象不支持此属性或方法”。
Dim test As New DVprogram Dim temp As New progDynArray temp.add (test)
当我改变数组类型为整数,一切正常,但是当我试图用我自己的一个类,它总是抛出此错误。我试过在ByVal和ByRef之间切换,并没有任何影响。我也发现这个:Passing objects to procedures in VBA,但那里的解决方案似乎不是我的问题。
分配对象时,您需要使用套装:
Set storage(count + 1) = data
和(由戈皮指出的),你需要删除()
调用您的加载方法时:
temp.add test
你不使用括号,除非你调用一个函数或使用Call
关键字
编辑:括号(不Call
)并不总是导致一个问题 - 他们做的是使你传递是第一当做表达式的说法,而评估的结果然后通过。在updateSize (max + 5)
的情况下,这不是问题,因为这是您想要的行为 - 将5
添加到max
并将该值传递给updateSize
。在temp.add (test)
的情况下,您不需要想要test
作为表达式进行评估。
删除括号解决了我的问题并显示了错误消息,但添加调用了一个“updateSize”子例程,该子例程调用时没有括号问题。为什么括号不会影响那里的东西,但是他们在别处呢? – thingyman 2015-02-11 01:40:01
尝试temp.add测试 代替temp.add(测试)
[VBA将类添加到集合]的可能的重复(http://stackoverflow.com/questions/6331106/vba-adding-a-class-to-a-collection) – GSerg 2015-02-11 01:03:42
为什么不使用集合? – 2015-02-11 01:16:21