不能使用类对象作为其他类的方法

问题描述:

我是新来的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,但那里的解决方案似乎不是我的问题。

+0

[VBA将类添加到集合]的可能的重复(http://stackoverflow.com/questions/6331106/vba-adding-a-class-to-a-collection) – GSerg 2015-02-11 01:03:42

+0

为什么不使用集合? – 2015-02-11 01:16:21

分配对象时,您需要使用套装:

Set storage(count + 1) = data 

和(由戈皮指出的),你需要删除()调用您的加载方法时:

temp.add test 

你不使用括号,除非你调用一个函数或使用Call关键字

编辑:括号(不Call)并不总是导致一个问题 - 他们做的是使你传递是第一当做表达式的说法,而评估的结果然后通过。在updateSize (max + 5)的情况下,这不是问题,因为这是您想要的行为 - 将5添加到max并将该值传递给updateSize。在temp.add (test)的情况下,您不需要想要test作为表达式进行评估。

+0

删除括号解决了我的问题并显示了错误消息,但添加调用了一个“updateSize”子例程,该子例程调用时没有括号问题。为什么括号不会影响那里的东西,但是他们在别处呢? – thingyman 2015-02-11 01:40:01

尝试temp.add测试 代替temp.add(测试)