2014-09-02 106 views
1

我以为阵列总是在VBA引用传递,但这个例子似乎是一个例外:按值传递VBA数组的示例?

' Class Module "C" 

Private a_() As Long 

Public Property Let a(a() As Long) 
    Debug.Print VarPtr(a(0)) 
    a_ = a 
End Property 

' Standard Module 

Sub test() 

    Dim a() As Long: ReDim a(9) 
    Debug.Print VarPtr(a(0))   ' output: 755115384 

    Dim oc As C 
    Set oc = New C 
    oc.a = a       ' output: 752875104 

End Sub 

它缠着我,因为我需要包含数组的类,它的制作额外的副本。

+0

我有一个类似的问题打开[这里](http://stackoverflow.com/questions/25328975/array-as-a-class-member)在哪里,虽然它还没有答案,评论可能对你有用。 – Blackhawk 2014-09-02 17:02:09

+0

有趣的问题,乔治,但什么是*问题*?你想知道*为什么*?或者你正在寻找替代品来创建三个副本? – 2014-09-02 17:08:38

+0

我在寻找速度,尽管与首先填充数组相比,它并不是一个巨大的命中。理想情况下,我希望'Public a_()as Long'直接从类外部访问数组,但这是不可能的。 – 2014-09-02 17:31:52

回答

0

这似乎参照工作,至少就传:

Sub test() 
Dim oc As New C 
Dim a() As Long: ReDim a(9) 

Debug.Print "test: " & VarPtr(a(0)) 

oc.Set_A a() 

End Sub 

在类模块C

Private a_() As Long 

Public Property Let a(a() As Long) 
    Debug.Print "Let: " & VarPtr(a(0)) 
    a_ = a 
End Property 

Function Set_A(a() As Long) 
    Debug.Print "Set_A: " & VarPtr(a(0)) 
    a_ = a 
End Function 

我注意,a(0)oc.a_(0)的评价是不同的,但是,我不确定这是否适合您的需求:

enter image description here