不能将类对象用作其他类中的参数'方法

时间:2015-02-11 00:59:52

标签: vba

我是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时,我收到错误“Object不支持此属性或方法”。

    Dim test As New DVprogram
    Dim temp As New progDynArray
    temp.add (test)

当我将数组类型更改为Integers时,一切正常,但是当我尝试使用我自己的一个类时,它总是抛出此错误。我试过在ByVal和ByRef之间切换,但都没有任何影响。我也发现了这个:Passing objects to procedures in VBA,但那里的解决方案似乎不是我的问题。

2 个答案:

答案 0 :(得分:0)

尝试temp.add测试 而不是temp.add(测试)

答案 1 :(得分:0)

分配对象时需要使用Set:

 Set storage(count + 1) = data

和(如Gopi所述)您需要在调用add方法时删除()

temp.add test

除非您正在调用函数或使用Call关键字

,否则不要使用括号

编辑:括号(不含Call总是导致问题 - 他们所做的是导致您传递的参数成为第一个作为表达式进行评估,然后传递该评估的结果。在updateSize (max + 5)这不是问题的情况下,因为这是您想要的行为 - 将5添加到max并将该值传递给updateSize。在temp.add (test)的情况下,希望test被评估为表达式。