VBA - 如何将集合添加到集合集合中

时间:2011-02-25 11:05:37

标签: vba excel-vba collections word-vba excel

我正在尝试使用Word 2007中的VBA创建代表表单文档的代码。我创建了表示Section,QuestionSet和Question的类。

所以我有15个部分。我创建了一个函数来创建每个'Section'对象将它添加到'Sections'集合然后销毁对象,结果是对象在集合中保持持久性(或者其他东西)。

是否可以使用相同的方法将集合添加到集合中,或者我是否必须明确定义每个集合?

模块中的代码:

Public Sections As Collection

Function DefineSection(ByVal SectionName As String)

    Set Section = New clsSection
    Section.myName = SectionName
    Sections.Add Section, SectionName

End Function


Function DefineQuestionSet(ByVal SectionName As String, ByVal Name As String, ByVal NoOfQuestions As Integer, ByVal IsMutuallyExclusive As Boolean, Optional ByVal DependentOnSection As String)

    Dim Qsets As Collection

    Set Qsets = New Collection
    Set QuestionSet = New clsQuestionSet

    QuestionSet.Name = Name
    QuestionSet.NoOfQuestions = NoOfQuestions
    QuestionSet.MutuallyExclusive = IsMutuallyExclusive

    If Not (DependentOnSection) = "" Then
        QuestionSet.DependentOnSection = DependentOnSection
    End If

    Qsets.Add QuestionSet
    Sections.Item(SectionName).Add Qsets

End Function

然后通过以下方式调用:

Sub Initilise()

    Set Sections = New Collection

    DefineSection "PersonalDetails"
    DefineQuestionSet "PersonalDetails", "PersonalDetails", 29, False

End Sub

3 个答案:

答案 0 :(得分:7)

即可。您绝对可以无限制地将集合添加到集合中。您发布的代码看起来应该只是通过浏览它来工作。你有特定的问题吗?

UPDATE :VBA仅将引用传递给对象。 如果在将对象分配给集合(例如Set myObj = Nothing)后明确销毁对象,那么您还将销毁集合中的对象。

[编辑]:显然这不是真的。来自this website(在评论中首先由Stevo链接):

  

为了使用集合来管理   类对象,你必须这样做   以下:

  • 创建班级的实例
  • 设置类的属性和方法
  • 将班级添加到公共收藏品
  • 卸载类的实例
  

您可能希望卸货   该类的实例导致   班级被关闭和终止。   但是,类对象仍然存在   因为你把它添加到一个集合中   然后拥有对该的引用   类。这是一个非常强大的   允许你控制的技术   通过一个对象引用   采集;类对象没有   终止,直到你从中删除它   集合。

更新:没有理由不能将对象添加到对象中。您只需要实例化对象的类来支持这样的方法。例如,在clsSection类模块中,您需要一个Add方法,该方法将传递给它的对象添加到存储在clsSection中的集合中:

Private QSetsColl As Collection

Public Sub Add(QSets As Object)
    If QSetsColl Is Nothing Then Set QSetsColl = New Collection
    QSetsColl.Add QSets
End Sub

答案 1 :(得分:1)

试试这个简单的例子:

Private Sub CommandButton1_Click()

    Dim masterCollection As New collection
    masterCollection.Add "first key", createDetailCollection()
    masterCollection.Add "second key", createDetailCollection()
    masterCollection.Add "third key", createDetailCollection()

End Sub

follow函数返回初始化集合

Function createDetailCollection()
    Dim collection As New collection
    createCollection = collezioneBuy
End Function

答案 2 :(得分:0)

我想我现在有了答案,但如果有人能说明这会有所帮助。

我认为代码正在尝试将一个集合添加到一个对象 - 这显然是行不通的。所以我需要创建一个集合,我可以添加对象和集合。等