我正在尝试使用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
答案 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)
我想我现在有了答案,但如果有人能说明这会有所帮助。
我认为代码正在尝试将一个集合添加到一个对象 - 这显然是行不通的。所以我需要创建一个集合,我可以添加对象和集合。等