型インスタンスのコピーを作成せずに、ローカル変数を使用してユーザー定義型を参照するにはどうすればよいですか?
例として、以下のコードで私が理想的にやりたいことは、ローカル変数MTを作成し、別の構造体内にネストされたデータ構造を参照する MySub3 にありますが、VBA はこれを許可しません。オブジェクトに対しては許可されますが、ユーザー定義型 (arrggg!) に対しては許可されません...そして明らかな理由もなく...単に許可しません。
MySub1 は、ネストされた構造体を長く不格好な方法で参照する方法を示しています。MySub2 は、ネストされた構造体を渡すことによってこれを行う方法を示していますが、これは呼び出しルーチンを混乱させ、そのようなネストされた構造体が複数あると見苦しくなります。
MySub2 は、VBAが私が望むことを実行できることを示していますが、それを実行する方法を提供していないようです。私はまだつまずいていない方法があることを願っています。
私の実際のコードは、この例よりもはるかに複雑であり、複数の独立した構造体が構造体要素として多くの配列にインデックスを提供していることに注意してください。これらのローカル参照変数を使用すると、コードがはるかに読みやすく、管理しやすくなります。
また、「with」ステートメントを認識していることに注意してください。これは役に立ちますが、一度に 1 つの構造体でしか使用できません。
また、実際のオブジェクト クラスを使用できることを認識していることにも注意してください。私のコードはオブジェクトを使用して開始しましたが、VBA がプロパティ メンバーとしての配列に制限を課していることにすぐに気付きました... ユーザー定義型にはない制限です。
Type tMyType
VariableA As Single
End Type
Type tMyOtherType
MyTypeArray() As tMyType
End Type
Type tOneMoreType
MyOtherType As tMyOtherType
End Type
Dim GlobalIndex As Integer
Sub TopLevel()
Dim TopLevelType As tOneMoreType
ReDim TopLevelType.MyOtherType.MyTypeArray(0 To 10)
Call MySub1(TopLevelType)
Call MySub2(TopLevelType.MyOtherType.MyTypeArray(GlobalIndex))
Call MySub3(TopLevelType)
End Sub
Sub MySub1(OMT As tOneMoreType)
Dim VarA As Single
VarA = OMT.MyOtherType.MyTypeArray(GlobalIndex).VariableA
End Sub
Sub MySub2(MT As tMyType)
Dim VarA As Single
VarA = MT.VariableA
End Sub
Sub MySub3(OMT As tOneMoreType)
Dim VarA As Single
Dim MT
Set MT = OMT.MyOtherType.MyTypeArray(GlobalIndex)
VarA = MT.VariableA
End Sub