'存放集合物件的區域變數
Private mCol As CollectionPublic Function Add(RecordTime As Date, Machine As Integer, Serial As Long, Optional sKey As String) As clsCardRecord
    '建立一個新物件
    Dim objNewMember As clsCardRecord
    Set objNewMember = New clsCardRecord
    '設定傳給此方法的屬性
    objNewMember.RecordTime = RecordTime
    objNewMember.Machine = Machine
    objNewMember.Serial = Serial
    If Len(sKey) = 0 Then
        mCol.Add objNewMember
    Else
        mCol.Add objNewMember, sKey
    End If
    '傳回建立的物件
    Set Add = objNewMember
    Set objNewMember = Nothing
End FunctionPublic Property Get Item(vntIndexKey As Variant) As clsCardRecord
    '用於引用集合物件的元素時
    'vntIndexKey 可包含集合物件的索引或索引鍵值,因此需宣告為 Variant
    '語法: Set foo = x.Item(xyz) or Set foo = x.Item(5)
  Set Item = mCol(vntIndexKey)
End PropertyPublic Property Get Count() As Long
    '用於取得集合物件的元素個數
    '語法: Debug.Print x.Count
    Count = mCol.Count
End Property
Public Sub Remove(vntIndexKey As Variant)
    '用於移除集合物件的元素
    'vntIndexKey 可包含索引或索引鍵值,因此需宣告為 Variant
    '語法: x.Remove(xyz)
    mCol.Remove vntIndexKey
End Sub
Public Property Get NewEnum() As IUnknown
    '本屬性可配合 For...Each 語法來列舉集合物件的元素
    Set NewEnum = mCol.[_NewEnum]
    
End Property
Private Sub Class_Initialize()
    '當物件類別建立時同時產生本集合物件
    Set mCol = New Collection
End Sub
Private Sub Class_Terminate()
    '當類別終結時清除本集合物件
    Set mCol = Nothing
End Sub其中
Public Property Get NewEnum() As IUnknown
    '本屬性可配合 For...Each 語法來列舉集合物件的元素
    Set NewEnum = mCol.[_NewEnum]
    
End Property這一句是什麼意思!

解决方案 »

  1.   

    加了这个属性的,可以令你在使用集合中可以枚举集合中的各元素。
    例如定义一个类clsUser用以包含用户的信息,另一个类clsUsers定义为用户的集合
    此时可用方法
    For Each clsUser in clsUsers
    Next 
    来列举所有的用户类clsUsers
      

  2.   

    是用于组件开发的吧?其中程序中的Count属性也可用于在对象实例化后,枚举集合中的所有元素,不过用上面的方法有利于提高程序运行的效率
      

  3.   

    不是用于組件開發的,是我的程序當中的一個類模塊
    clsCardRecords 類 表示該員工在考勤機中的打卡(每一天都會有多次打卡!)
    而clsCardRecord 類 表示該員工在考勤機每次打卡的 時間,  考勤機的機號, 序號
      

  4.   

    咦,找了个简单的例子和你的差不多,你该不是从哪找到例子直接改的吧?还是直接说你的程序比如说你在应用程序中实例化一个对象时
    Dim uCardRecords as  clsCardRecords
    dim uCardRecord  as  clsCardRecord实例化时只需实例化一个对象集,如:
    Set uCardRecords = CreateObject("clsCardRecords")如需使用uCardRecord对象时,则无须重新创建,使用如下方法:
    For Each uCardRecord in uCardRecords
        '可取得集合中的所有对象实例
    Next如需使用某对象时:
    Set uCardRecord = uCardRecords(intCount)
      

  5.   

    另外最好在clsCardRecords类中增加业务逻辑层,如Public Function GetCardRecord(ByVal CardID As String) As clsCardRecord
        Dim i           As Long
        Dim adoCmm      As Command
        Dim adoRec      As Recordset
        Dim uCardRecord As clsCardRecord
        
        On Error GoTo ErrorHandler
        '先从集合中寻找
        For i = 1 To mCol.Count
            If mCol(i).CardID = CardID Then Exit For
        Next i
        If i > mCol.Count Then
            Set adoCmm = GetCommand(madoCnn)
            adoCmm.Parameters.Append adoCmm.CreateParameter("@CardID ", adVarChar, adParamInput, 10, CardID )
            '判断是否存在
            adoCmm.CommandText = "select CardID from [CardRecord] where CardID =?"
            Set adoRec = adoCmm.Execute
            If adoRec.EOF Then
                mvarErrorInfo = "[" & CardID & "]不存在!"
                GoTo ErrorHandler
            Else
                Set uCardRecord = Append(CardID ,……)
            End If
            adoRec.Close
            Set GetCardRecord= uPatient
        Else
            Set GetCardRecord= mCol(i)
        End If
        GoTo ExitHandler
    ErrorHandler:
        Set uCardRecord = Nothing
        mvarErrorInfo = Err.Description
    ExitHandler:
    End Function这样你在应用程序设计中可以用
    set uCardRecord = uCardRecords.GetCardRecord(CardID)方法来得到相应的clsCardRecord 类,这是我用自己做的一个组件中的例子稍微修改下得到的
      

  6.   

    说白类似
    for each in 语法这样就明白了吧!