| 
    
     |  | ▼ichinose さん: >▼★珍念★ さん:
 >>皆様、初めまして。珍念と申します。
 >>
 >>タイトルにもありますが、クラスモジュール内でのvariant型配列変数の使い方について、分からない点があります。以下に書き出します。
 >>
 >>--------------------------------------------------------------------------
 >>
 >>・クラスモジュール内で配列変数(variant型)を使用するには、Private Type内で記述する必要がある?
 >
 >中で宣言するならそうですね
 >
 >>⇒現在は他に使い方が分からない為、この方法を用いて記述しています。
 >>
 >>以下コーディング
 >> ↓↓↓↓
 >>
 >>Private Type テーブル
 >>
 >>  サブ名 As String
 >>  データ() As Variant   ←問題となっている配列変数
 >>  開始行 As Integer
 >>  終了行 As Integer
 >>  開始列 As Integer
 >>  終了列 As Integer
 >>  行数 As Integer
 >>  列数 As Integer
 >>
 >>End Type
 >private class_tbl as テーブル
 >'のようにプロシジャーの外で宣言しないとデータが保持されませんよ
 >
 >
 >>【問題1】
 >>この配列変数をプロパティとして扱いたいが、このプロパティ内で再度ユーザ定義型変数を宣言する必要があり、宣言すると配列変数(variant)の値がクリアされてしまう。
 >>以下コーディングです。
 >>
 >>Public Property Get テーブルデータ()
 >>  Dim tbl As テーブル     ←ここで再度ユーザ定義型宣言しないと使えない
 >'   ↑削除する
 >   テーブルデータ = class_tbl.データ() '  でも宣言すると値がクリアされてしまう。
 >>End Property            結局なにもデータが格納されない。
 >>                  エラーは出ない。
 >>
 >>【問題2】
 >>そこで、クラスモジュール内で使いまわせる方法があればと思い、Private TypeをPublic Typeに変更して記述してみましたが、「オブジェクトモジュール内ではパブリックユーザー定義型は定義できません」のエラーがでてしまう為、これもうまくいきません。
 >public type は、クラスでは使えませんね。
 >私が作ったサンプルです。
 >クラスモジュール(class1)に
 >'=========================================================
 >Private Type テーブル
 >  aaa As Long
 >  bbb As String
 >  myarray() As Variant
 >  End Type
 >Private カプセルデータ As テーブル
 >'==============================================
 >Property Get get_tbl() As Variant
 >  get_tbl = カプセルデータ.myarray
 >End Property
 >'====================================================
 >Property Let get_tbl(dat As Variant)
 Erase カプセルデータ.myarray
 カプセルデータ.myarray() = dat
 >End Property
 '↑Property Let もこれだけでOKでした
 
 >
 >標準モジュールに
 >'=======================================================
 >Sub main()
 >  Dim ans
 >  Dim test As New Class1
 >  Dim sample(1 To 5)
 >  Dim samp
 >  For idx = 1 To 5
 >   sample(idx) = idx
 >   Next
 >  samp = sample()
 >  test.get_tbl = samp
 >  ans = test.get_tbl
 >  For idx = LBound(ans) To UBound(ans)
 >    MsgBox ans(idx)
 >    Next
 >End Sub
 >
 >で、1,2,3,4,5と順番に表示されました。
 
 |  |