0

私は最初のクラスを書いています。1 つは cCRElist で、これは本質的に cCRE インスタンス (特殊なイベント) のコレクションです。

ワークシートからすべての CRE を作業可能な 1 つの大きなコレクションにロードする cCRElist 内にサブまたは関数が必要です。関数を作成し、通常のコード モジュールから呼び出すと問題なく動作しましたが、コードをクラスに移動しようとしました。現在、関数 LoadFromWorksheet(myWS as Worksheet) の呼び出しに問題があります。

エラーは「オブジェクトはこのプロパティまたはメソッドをサポートしていません」です。私はそれをサブ、関数にして、パブリックではなくパブリックにしてみました。サブの代わりにProperty Letに変えてみました。明らかに、私はそれが何をするかについて薄っぺらです。私が試してみました

Call CREList.LoadFromWorksheet(myWS) 

CREList.LoadfromWorksheet myWS

毎回同じエラー。

クラスを使用して関数を呼び出すテスト コードを次に示します。

Sub TestClassObj()
    Dim CRElist As cCRElist
    Set CRElist = New cCRElist

    Dim myWS As Worksheet

    Set myWS = ThisWorkbook.ActiveSheet

    CRElist.LoadFromWorksheet (myWS)

End Sub

クラス cCRElist のスニペットを次に示します。

' **** CLASS cCRElist
Option Explicit

' This is a collection of CRE objects
Private pCRElist As Collection

Private Sub Class_Initialize()
    Set pCRElist = New Collection
End Sub

Public Property Get CREs() As Collection
    Set CREs = pCRElist
End Property

Public Property Set Add_CRE(aCRE As cCRE)
        pCRElist.Add aCRE
End Property

Function LoadFromWorksheet(myWS As Worksheet)
    Dim CRE As cCRE
    Dim iFirst As Long
    Dim iLast As Long
    Dim i As Long

    Set CRE = New cCRE

    iFirst = gHeader_Row + 1
    iLast = FindNewRow(myWS) - 1

    ' update data in CRE then add
    For i = iFirst To iLast
        If myWS.Cells(i, gCRE_Col) <> "" Then   ' This is a CRE row
            Set CRE = New cCRE
            With CRE
                .CRE_ID = myWS.Cells(i, gCRE_Col)
                If Not IsDate(myWS.Cells(i, gCRE_ETA_Col)) Then
                    .ETA = "1/1/1900"
                Else
                    .ETA = Trim(myWS.Cells(i, gCRE_ETA_Col))
                End If
                <... snipped ...>
            End With
            pCRElist.Add_CRE CRE
        End If
    Next
End Sub
' **** END OF CLASS cCRElist

あなたの専門知識をありがとう。

4

1 に答える 1

0

これが、コメントで得たヘルプに基づいて機能したものです。まず、「クラスモジュールの中断」を行いました。テスト コードでは、関数呼び出しを次のように変更しました。

CRElist.LoadFromWorksheet(myWS)

CRElist.LoadFromWorksheet myWS

クラスの中で、私は変わらなければならなかった

Set pCRElist.Add_CRE CRE

pCRElist.Add CRE

その後、余計な CLASS 関数の Add_CRE と Count を取り除くことができました。

皆様のご意見をお寄せいただきありがとうございます。コメントを承認済みの回答としてマークする方法がわからなかったので、これを行いました。別のことをする必要がある場合はお知らせください。今それは動作します!

于 2013-08-02T18:41:51.207 に答える