VBA(またはVB6)で配列参照をコピーする方法はありますか?VBAで配列参照をコピーする
VBAでは、配列は値型です。 1つの配列変数を別の配列変数に割り当てると、配列全体がコピーされます。私は2つの配列変数を同じ配列を指すようにしたい。おそらくいくつかのAPIメモリ関数や関数を使用して、これを達成する方法はありますか?実際には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)
しかし、これはまだ、単純に1を許可していません。既存の基準と同じ範囲で新しい基準を作成する。
私はあなたの質問への答えを知っていませんが、私は解決策に非常に興味があります...あなたの配列を保持シングルトンクラスを作成し、クラスを経由して参照を返すことはできますか? – Marshall
関数またはプロパティから配列を返すことは、値によっても動作し、配列の新しいコピーを返します。これは実際に私が取り組もうとしている真の問題です。 –