標準モジュール
Type typX
strY1 As String
lngY2 As String
End Type
クラスモジュール(ObjectNmae=clsA)
Dim m_Z(2) As typX
このような状態でクラス外からclsA.Z(1).strY1の様にクラス内のユーザー定義型変数をプロパティとして扱うにはどうすればよいのでしょうか
値の取得は
Friend Property Get Z(index as Integer) As typX
Z = m_Z(index)
End Property
でできるのですが
値の設定では
Friend Property Get Z(index as Integer, Value As typX)
m_Z(index) = Value
End Property
としただけでは
clsA.Z(1).strY1="aaa"
と入力しても値が変更されないのです。
値の設定はProperty GetじゃなくてProperty Letですよ(^^;
それとも投稿時のタイプミスでしょうか?
ユーザー定義型のメンバーに直接入力できないのでは?
試してないけど
Dim udtX As typX
udtX.strY1 = "aaa"
clsA.Z81) = udt
としてみるとか
もしかすると
Lset clsA.Z81) = udt
としないとだめかもしれない。
値の設定はご指摘の通りで入力ミスです。
あと、解決策ですがその方法も考えつきはしたのですが値の変更を行うには該当するプロシージャでいちいち代入用変数を宣言するか、グローバルスコープで宣言しておいて毎回コピー→変更→代入と手間がかかるので直接設定できないかとお尋ねしました。
Friend Property Get Z_strY1(index As Integer) As String
Z_strY1 = m_Z(index).strY1
End Property
Friend Property Let Z_strY1(index As Integer, Value As String)
m_Z(index).strY1 = Value
End Property
Friend Property Get Z_lngY2(index As Integer) As String
Z_lngY2 = m_Z(index).lngY2
End Property
Friend Property Let Z_strY2(index As Integer, Value As String)
m_Z(index).lngY2 = Value
End Property
というPropertyを作るのはだめですか?
ご返答ありがとうございます。
提示された方法では実際に作っているプログラムではプロパティが多くなりすぎる(100は超えます)ので訳がわからない状況のなってしまいます。
また、今の方法だとネストしたユーザー定義型が使えないようなのでクラス自体の階層化をした方が良さそうだとわかりました。
ツイート | ![]() |