2014-09-02 56 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