配列が参照によって返される場合、なぜ次のことが機能しないのですか?
'Class1 class module
Private v() As Double
Public Property Get Vec() As Double()
Vec = v()
End Property
Private Sub Class_Initialize()
ReDim v(0 To 3)
End Sub
' end class module
Sub Test1()
Dim c As Class1
Set c = New Class1
Debug.Print c.Vec()(1) ' prints 0 as expected
c.Vec()(1) = 5.6
Debug.Print c.Vec()(1) ' still prints 0
End Sub
VBAでは、配列はByRef
パラメータを介して返されない限り、参照によって返されることはありません。さらに、=
を使用して配列を変数に割り当てるときはいつでも、プロシージャ内のByRef引数に配列を割り当てている場合でも、配列の新しいコピーを作成しているので、かなりきれいです。この仕事をしようとして運が悪かった。
いくつかの選択肢は...
Letプロパティがありません。また、getプロパティは、問題の要素だけでなく、配列全体を返します。 Property Getの戻り値の型をDouble()から単なるDoubleに変更します。プロパティレットを追加します。 2つの入力を取りますが、1つだけが渡されることに注意してください。最後の変数(この場合はMyValue)は、=記号の後の値から値を取得すると想定されます。 Test1()の早い段階でブレークポイントを設定し、[ローカル]ウィンドウで値がどのように影響を受けるかを確認します。元のコードと私のコードによって作成された変数を比較します。
'Class1 class module
Private v() As Double
Public Property Get Vec(index As Long) As Double
Vec = v(index)
End Property
Public Property Let Vec(index As Long, MyValue As Double)
v(index) = MyValue
End Property
Private Sub Class_Initialize()
ReDim v(0 To 3)
End Sub
' end class module
'Begin module
Sub Test1()
Dim c As Class1
Set c = New Class1
Debug.Print c.Vec(1) ' prints 0 as expected
c.Vec(1) = 5.6
Debug.Print c.Vec(1) ' prints 5.6
End Sub
'End module
Vec(index As Long、MyValue As Double)
ここでindexキーワードは何をしますか?この配列関連のインデックスについて学ぶことができるWebページに私を向けてください。