VBA - Comment ajouter une collection une collection de collections
Je suis en train de créer un code pour représenter un document de formulaire à l'aide de VBA dans Word 2007. J'ai créé des classes pour représenter la Section, QuestionSet et la Question.
Donc, j'ai 15 Sections. J'ai créé une fonction pour créer chaque "Section" de l'Objet de l'ajouter à la "Sections" de la Collection, puis à détruire l'objet, le résultat étant que les objets restent persistants dans la collection (ou quelque chose).
Est-il possible d'utiliser la même méthode pour ajouter des collections de collections ou aurais-je à définir chaque collection explicitement?
Code dans le Module:
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
Alors ce qui est appelé via:
Sub Initilise()
Set Sections = New Collection
DefineSection "PersonalDetails"
DefineQuestionSet "PersonalDetails", "PersonalDetails", 29, False
End Sub
OriginalL'auteur Stevo | 2011-02-25
Vous devez vous connecter pour publier un commentaire.
Oui. Vous pouvez tout à fait ajouter des collections de collections en collections à l'infini. Le code que vous avez posté dirait qu'il devrait fonctionner à partir jetant un regard de travers. Rencontrez-vous des problèmes particuliers?
Mise à JOUR: VBA passe seulement autour de références à des objets.
Si vous l'avez explicitement détruire un objet après l'affectation à une collection (par exemple,Set myObj = Nothing
), alors vous serez également en détruisant l'objet à l'intérieur de la collection.[EDIT]: Apparemment ce n'est pas vrai. De ce site internet (d'abord lié par Stevo dans les commentaires):
Mise à JOUR: Il n'y a aucune raison pourquoi vous ne pouvez pas ajouter une collection à un objet. Vous avez juste besoin de la classe de votre objet est instancié à partir de l'appui d'une telle méthode. Par exemple, dans votre
clsSection
module de classe vous avez besoin d'unAdd
méthode qui ajoute des objets est passé pour une collection stockée dans leclsSection
:Juste pour préciser, le code ajoute les objets de la collection et le détruit l'instance de l'objet, mais il reste persistante dans la collection, donc je n'ai pas de garder une trace des objets. Est-il de même pour les collections? c'est à dire créer une collection B, ajouter à la collection parent d'Un, détruire la collection B, mais parce qu'il est ajouté à Une collection, il reste un "objet" dans la collection A.
le message d'erreur est le plus énigmatique de " cet objet ne gère pas cette propriété ou cette méthode
Merci, cela m'a aidé à s'en sortir. Bien que sur ce point à propos des objets détruits, mais les propriétés de la partie restante de la collection: support.microsoft.com/kb/198465
Merci pour le lien. J'ai appris quelque chose de nouveau aujourd'hui. J'ai mis à jour ma réponse afin de refléter les infos dans le lien.
OriginalL'auteur mwolfe02
Essayez ce simple exemple:
Le suivi de retour de la fonction d'un initializated collection
Set createCollection = collezioneBuy
au lieu decreateCollection = collezioneBuy
danscreateDetailCollection()
.OriginalL'auteur daniele3004
Je pense que j'ai la réponse maintenant, mais si quelqu'un pouvait préciser que ce serait utile.
Je pense que ce que fait le code est d'essayer d'ajouter une collection à un objet - ce qui évidemment ne fonctionne pas. J'ai donc besoin de créer une collection à laquelle j'ai ajouté de l'objet ET de la collection. etc.
OriginalL'auteur Stevo