Excel VBA,自定义类:函数调用引发“不支持的方法”错误

时间:2013-07-31 20:19:04

标签: class excel-vba vba excel

我正在写第一堂课。 一个是cCRElist,它本质上是cCRE实例的集合(一些专门的事件)。

我希望在cCRElist中有一个子或函数,它将把工作表中的所有CRE加载到我可以使用的一个大集合中。我创建了这个函数,当我从普通代码模块调用它时它工作正常,但后来我尝试将代码移到类中。现在我无法调用LoadFromWorksheet函数(myWS作为工作表)。

错误是“对象不支持此属性或方法”。我试过把它变成一个子,一个函数,让它公开,而不是公开,我试着变成一个Property Let而不是sub。显然,我对这是做什么有一个脆弱的把握。我试过了

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

感谢您的专业知识。

1 个答案:

答案 0 :(得分:0)

根据我在评论中提供的帮助,这是有用的。首先,我做了“课堂休息模块”。在测试代​​码中,我更改了函数调用:

CRElist.LoadFromWorksheet(myWS)

CRElist.LoadFromWorksheet myWS

在课堂上,我不得不改变

Set pCRElist.Add_CRE CRE

pCRElist.Add CRE

然后我能够摆脱无关的CLASS函数Add_CRE和Count。

感谢大家的投入。我无法弄清楚如何将评论标记为已接受的答案,所以我这样做了。如果我需要做一些不同的事情,请告诉我。 现在它有效!