プロが教える店舗&オフィスのセキュリティ対策術

 タイトルの通りなんですが、
配列として持っているプロパティがあります。
そのプロパティをREDIMしたいのですが、
これは可能なのでしょうか?

VB6.0の話になります。



 『クラスモジュールに表記しています』
'詳細クラス
Public Property Get PK_SYOUSAI() As clsSyousai
PK_SYOUSAI = K_SYOUSAI()
End Property

Public Property Let PK_SYOUSAI(ByVal strValue As clsSyousai)
K_SYOUSAI = strValue
End Property





 『標準モジュールに表記しています』
ReDim Preserve clsKouSei_K(0).PK_SYOUSAI(i)
clsKouSei_K(0).PK_SYOUSAI(i) = cls_S


 上記のREDIMの部分でエラーが起こり、処理が進みません。
どうすればよいのでしょうか?

A 回答 (3件)

配列を返すプロパティの要素数を操作するのはクラス側に実装しないと意味が無いのではないかと思います



プロパティ自体を操作するのではなく 戻ってくるオブジェクトのローカル変数配列を操作するようにすればいいのではないかと思います

受け取る変数は バリアント型にします
Dim objShousai
objShousai = clsKousei_K(0).PK_SHOUSAI()
Redim Preserve objShousai(3)
といった具合に使いましょう

またプロパティで配列を扱うなら
public property Get Shousai() as clsSyousai()
  Shousai = K_SYOUSAI()
End Property

Public Property Let Shousai( arShousai() as clsShousai )
  K_SHOUSAI = arShousai
End Property
といった具合に Getの型指定に()を Letの引数に()を付けます
    • good
    • 1
この回答へのお礼

ありがとうございます。
おかがで何とかできました。
どうやら私の書き方が違っていたようです。^^;

お礼日時:2008/03/08 15:04

 PK_SYOUSAIが標準モジュールに入っているので、いまいちクラスとの関係がつかめませんが、直接的に言える事は、#1さんの、



>Dim MyArray() As Integer ' 動的配列を宣言します。

に相当する部分が、標準モジュールにないという事です。Redimをかける場合、必ず、

  Dim clsKouSei_K(0).PK_SYOUSAI() '最後の i がない

のような、事前宣言が必要です。

この回答への補足

回答、ありがとうございました。
まだまだクラスの使い方の勉強不足です。
アドバイス、ありがとうございました。

補足日時:2008/03/08 15:06
    • good
    • 0

参考まで



*** ReDim ステートメントの使用例 ****
次の例では、ReDim ステートメントを使って、動的配列変数を保存するメモリ領域の割り当てと再割り当てを行います。Option Base ステートメントには、1 が設定されているものとします。

Dim MyArray() As Integer ' 動的配列を宣言します。
Redim MyArray(5) ' 5 要素分の領域を割り当てます。
For I = 1 To 5 ' 5 回、ループします。
MyArray(I) = I ' 配列を初期化します。
Next I

次のステートメントは、配列のサイズを変更して、以前の要素を消去します。

Redim MyArray(10) ' 配列の要素数を 10 に変更します。
For I = 1 To 10 ' 10 回、ループします。
MyArray(I) = I ' 配列を初期化します。
Next I

次のステートメントでは、以前の要素を消去せずに、配列のサイズを変更します。

Redim Preserve MyArray(15)
' 配列の要素数を 15 に変更します
    • good
    • 0
この回答へのお礼

ありがとうございました。
動的変数の使い方は知っていたのですが、
勉強になりました。
ありがとうございます。

お礼日時:2008/03/08 15:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!