私は最初のクラスを書いています。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
あなたの専門知識をありがとう。