VBA:通过在Sub中引用将数组修改为对象的成员

时间:2018-08-23 09:43:22

标签: vba pass-by-reference

我的Excel-applicatin有一个带有实用程序功能的模块。其中之一将项目添加到数组:

Public Sub addToArray(ByRef arr As Variant, item As Variant)
'Sub adds one element to a referenced array
    On Error Resume Next
    Dim bd As Long
    bd = UBound(arr)
    If Err.Number = 0 Then
        ReDim Preserve arr(bd + 1)
    Else
        ReDim Preserve arr(0)
    End If
    arr(UBound(arr)) = item
End Sub

只要我传递未引用为对象成员的数组,此Sub即可完美工作。

addToArray arr, item 

可以,但是...

addToArray myObject.arr, item 

不是...

第二个调用将该项添加到数组,但丢失对myObject的引用

我可以通过在每个类中实现一个方法来编写一种解决方法(不需要对象引用,因为它可以访问同一对象的属性),但这不是我要解决的问题。

请给我;)

1 个答案:

答案 0 :(得分:1)

不幸的是,由于VBA的限制,这是不可能的。

当您访问对象的公共变量字段时,它会按值复制,因此原始参考不会公开。而且,如果将数组(内部是引用类型)声明为公共字段,则会出现编译错误“常量,定长字符串,数组,用户定义的类型和Declare语句不允许作为对象模块的Public成员“