我是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,但那里的解决方案似乎不是我的问题。
答案 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
被评估为表达式。