| 
    
     |  | ▼★珍念★ さん: >皆様、初めまして。珍念と申します。
 >
 >タイトルにもありますが、クラスモジュール内での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
 For idx = LBound(dat) To UBound(dat)
 With カプセルデータ
 ReDim Preserve .myarray(LBound(dat) To idx)
 カプセルデータ.myarray(idx) = dat(idx)
 End With
 Next idx
 End Property
 
 標準モジュールに
 '=======================================================
 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と順番に表示されました。
 
 |  |