VBA (または VB6) で配列参照をコピーする方法はありますか?
VBA では、配列は値型です。ある配列変数を別の配列変数に代入すると、配列全体がコピーされます。同じ配列を指すように 2 つの配列変数を取得したいと考えています。おそらくいくつかの API メモリ関数や関数を使用VarPtr
して、実際に VBA で変数のアドレスを返す方法はありますか?
Dim arr1(), arr2(), ref1 As LongPtr
arr1 = Array("A", "B", "C")
' Now I want to make arr2 refer to the same array object as arr1
' If this was C#, simply assign, since in .NET arrays are reference types:
arr2 = arr1
' ...Or if arrays were COM objects:
Set arr2 = arr1
' VarPtr lets me get the address of arr1 like this:
ref1 = VarPtr(arr1)
' ... But I don't know of a way to *set* address of arr2.
ちなみに、同じ配列変数ByRef
をメソッドの複数のパラメーターに渡すことで、同じ配列への複数の参照を取得することができます。
Sub DuplicateRefs(ByRef Arr1() As String, ByRef Arr2() As String)
Arr2(0) = "Hello"
Debug.Print Arr1(0)
End Sub
Dim arrSource(2) As String
arrSource(0) = "Blah"
' This will print 'Hello', because inside DuplicateRefs, both variables
' point to the same array. That is, VarPtr(Arr1) == VarPtr(Arr2)
Call DuplicateRefs(arrSource, arrSource)
しかし、それでも、既存のものと同じスコープで新しいリファレンスを単純に製造することはできません。