Class VBA Excel:如何使用集合键?

Class VBA Excel:如何使用集合键?,class,excel,collections,vba,Class,Excel,Collections,Vba,我实现了一个类对象集合。我从一篇在线文章中获得了如何创建类对象集合的说明,但我并不完全理解。我的收藏很有用。我可以将对象添加到Coll,操作它们的数据,并从其他函数中使用它们 该条: 也许它只在VBA中有用,但在VBA Excel中不有用?我经常被那件事绊倒 目前,我只向集合中添加了一种类型的对象,但添加多种对象类型会更有用。然而,当我遍历每个对象时,我不知道它们是什么类型 第二套钥匙是干什么用的?什么是钥匙?如何在Excel VBA中使用它?在添加不同类型的对象时会有所帮助吗 ' Collec

我实现了一个类对象集合。我从一篇在线文章中获得了如何创建类对象集合的说明,但我并不完全理解。我的收藏很有用。我可以将对象添加到Coll,操作它们的数据,并从其他函数中使用它们

该条:

也许它只在VBA中有用,但在VBA Excel中不有用?我经常被那件事绊倒

目前,我只向集合中添加了一种类型的对象,但添加多种对象类型会更有用。然而,当我遍历每个对象时,我不知道它们是什么类型


第二套钥匙是干什么用的?什么是钥匙?如何在Excel VBA中使用它?在添加不同类型的对象时会有所帮助吗

' Collection cCRE_Coll

Option Explicit
Private Const msMODULE As String = "cCRE_Coll"

' This is a collection of CRE objects
Private pCount As Long
Private Coll As Collection
Private CollKeys As Collection

  Private Sub Class_Initialize()
        Set Coll = New Collection
        Set CollKeys = New Collection
    End Sub

    Private Sub Class_Terminate()
        Set Coll = Nothing
        Set CollKeys = Nothing
    End Sub

Public Property Get Count() As Long
    pCount = Coll.Count
End Property
下面是我如何测试它的,但我需要做更多复杂的操作

Sub testReadWrite()
    Dim collCRE As New Collection
    Dim collPE As New Collection
    Dim collPP As New Collection
    Dim clsCRE As cCRE
    Dim clsPE As cPE
    Dim clsPP As cPP

    Dim i As Long
    Dim myWS As Worksheet
    Dim lLastRow As Long

    Set myWS = ActiveSheet

    lLastRow = lFindNewRow(myWS) - 1
    ' Item count starts at 1

' Test reading in all the different types of row entries
    For i = giHEADER_ROW + 1 To lLastRow
    If myWS.Cells(i, ColNum.CRE_ID) <> vbNullString Then
        ' Read in a CRE
        Set clsCRE = New cCRE   ' Start with a blank clsCRE
        Call clsCRE.ReadFromWS(myWS, myWS.Cells(i, ColNum.CRE_ID))
        collCRE.Add clsCRE
    ElseIf StrComp(myWS.Cells(i, ColNum.PE_CRE_ID), gsPE_SUMMARY_TAG) = 0 Then
        ' Read in a PE/RCR (not a PP)
        Set clsPE = New cPE
        Call clsPE.ReadFromWS(myWS, myWS.Cells(i, ColNum.PE_ID))
        collPE.Add clsPE
    ElseIf StrComp(myWS.Cells(i, ColNum.PE_ID), gsPP_ID) = 0 Then
        Set clsPP = New cPP
        Call clsPP.ReadFromWS(myWS, i)
        collPP.Add clsPP
    ElseIf myWS.Cells(i, ColNum.PE_ID) = vbNullString Then
        Debug.Print "Cannot Read In Row " & i
    End If
    Next

' In the middle I will change, sort, add and remove objects.

' Test writing out all of the different types of row entries
    For Each clsCRE In collCRE
        Call clsCRE.WriteToWS(ThisWorkbook.Sheets("Sheet1"))
    Next

    For Each clsPE In collPE
        Call clsPE.WriteToWS(ThisWorkbook.Sheets("Sheet1"))
    Next

    For Each clsPP In collPP
        Call clsPP.WriteToWS(ThisWorkbook.Sheets("Sheet1"))
    Next

End Sub
Sub testReadWrite()
Dim collCRE作为新系列
Dim collPE作为新系列
Dim collPP作为新系列
作为cCRE的Dim clsCRE
作为cPE的Dim clsPE
作为cPP的Dim clsPP
我想我会坚持多久
将myWS设置为工作表
昏暗的灯塔一样长
设置myWS=ActiveSheet
lLastRow=lFindNewRow(myWS)-1
'项目计数从1开始
'在所有不同类型的行条目中测试读取
对于i=GIU标题行+1至lLastRow
如果myWS.Cells(i,ColNum.CRE_ID)为vbNullString,则
“读CRE
设置clsCRE=新cCRE“以空白clsCRE开始
调用clsCRE.ReadFromWS(myWS,myWS.Cells(i,ColNum.CRE_ID))
collCRE.Add clsCRE
ElseIf StrComp(myWS.Cells(i,ColNum.PE\u CRE\u ID),gsPE\u SUMMARY\u TAG)=0
'读入PE/RCR(非PP)
设置clsPE=新的cPE
调用clsPE.ReadFromWS(myWS,myWS.Cells(i,ColNum.PE_ID))
collPE.addclspe
ElseIf StrComp(myWS.Cells(i,ColNum.PE_ID),gsPP_ID)=0
设置clsPP=新cPP
调用clsPP.ReadFromWS(myWS,i)
collPP.Add clsPP
ElseIf myWS.Cells(i,ColNum.PE_ID)=vbNullString然后
Debug.Print“无法在行中读取”&i
如果结束
下一个
在中间,我将改变、排序、添加和删除对象。
'测试写出所有不同类型的行条目
对于collCRE中的每个clsCRE
调用clsCRE.WriteToWS(ThisWorkbook.Sheets(“Sheet1”))
下一个
对于collPE中的每个clsPE
调用clsPE.WriteToWS(thishworkbook.Sheets(“Sheet1”))
下一个
对于collPP中的每个clsPP
调用clsPP.WriteToWS(ThisWorkbook.Sheets(“Sheet1”))
下一个
端接头

第二组密钥用于什么?根据cpearson链接回答:CollKeys集合用于存储Coll集合中存储的CFile对象的键。我们需要第二个集合,因为集合的键是只写的——无法获取集合现有键的列表。它在Excel VBA中是如何使用的?答:由于集合类定义为
publicnotcreateable
,因此我们无法使用New关键字创建该类的实例。这将帮助您如何在vba中使用该类。这是一个非常类似于的情况。并且非常类似于@vba4all否,不是第一个,而是第二个。为什么不在帖子上做个标记,让版主确认一下呢?