■99807 / ) |
Re[1]: クラスが作れません。 |
□投稿者/ 魔界の仮面弁士 (3386回)-(2022/06/07(Tue) 10:14:08)
|
■No99806 (白音 さん) に返信 > Private Sub Class_Initialize() > Dim dtAs Variant > name = "" > For Each mnt In data > dt= 0 > Next > End Sub
dtAs → dt As という点はさておき、変数 mnt が未定義ですし、 そもそもループ処理が意味不明過ぎるんですが…。
> 「クラスモジュール 定数、固定長文字列、配列、 > ユーザー定義型およびDeclare ステートメントは > オブジェクトモジュールのパブリックメンバーとしては使用できません」
Public メンバーにしなければ OK です。(Private なら構わない)
そもそも、モジュールレベルの配列を Public として公開した場合、 クラス以外の場所から ReDim や Erase されてしまう可能性があるので、 「カプセル化」の観点からはあまり望ましくなかったりします。
'--- 案1: 白音さん御自身が行われたように、「内部処理形式が Double の配列であるバリアント型」を使う
'--- 案2: 配列として公開するのではなく、添字引数付きのスカラー値プロパティの形で公開する ' → ActiveX 版 ListBox の List プロパティがこの形ですね。 Option Explicit
Public Name As String Private m_data(10) As Double
Public Property Get Data(ByVal index As Integer) As Double Data = m_data(index) End Property Public Property Let Data(ByVal index As Integer, ByVal newValue As Double) m_data(index) = newValue End Property
'--- 案3: 「配列を戻り値として返す Function」または「配列を返す読み取り専用プロパティ」として公開する ' ※プロパティにすると扱い辛いので、このケースでは Function の方が便利です。 ' Option Explicit
Public Name As String Private m_data(10) As Double
Public Property Get Data() As Double() Data = m_data End Property
'あまりお奨めはしないけど、書き込み可能にするならこんな感じ 'Public Property Let Data(ByRef newArray() As Double) ' Erase m_data ' Dim vnt As Variant, idx As Integer ' idx = LBound(m_data, 1) ' For Each vnt In newArray ' m_data(idx) = vnt ' idx = idx + 1 ' Next 'End Property
|
|