7
votes

Posilez la collection VBA avec des objets personnalisés à l'aide de Collection.Ajouter

J'essaie d'ajouter un objet personnalisé (transaction) via le samplecollection.add code> de l'intérieur A pour boucle.

Le code fonctionne si j'ajoute des chaînes à la collection au lieu d'objets. xxx pré>

le débog.print n & "-" & objtrans2.desc code> ligne au bas de ce code est sortie "Description 2" deux fois. Je veux que cela produise "Description 1" et "Description 2". P>

Voici les informations de la classe de transaction: P>

Public PTXN As Integer
Public ACCTID As Integer
Public CHECKNUM As String
Public DESC As String
Public STATUS As String
Public TRANSACTIONDATE As String
Public SPLIT_DESC As String
Public SPLIT_AMT As Single
Public SPLIT_CATEGORY As Integer


0 commentaires

4 Réponses :


1
votes

Un formulaire légèrement modifié (sans la classe de transaction) fonctionne comme prévu pour moi. Je crois qu'il y a une erreur est votre classe de transaction. Pouvez-vous poster le code pour cela?


1 commentaires

Mitch, j'ai ajouté un autre code à ma description ci-dessus. Peut-être que vous pouvez me dire ce que vous avez utilisé à la place de ma classe de transaction? Peut-être que je peux essayer d'obtenir votre code pour travailler à ma fin.



7
votes

Vous devez faire une nouvelle instance d'objtrans. Ce que vous faites est de définir Desc à la description 1, ajoutant à la collection, puis à la modification de Desc à la description 2 (ne faisant pas une nouvelle instance Objtrans) et en ajoutant ce même exemple à la collection une seconde fois. Voici comment je le ferais.

Public Function PopCollection()

    Dim sampleCollection As Collection
    Dim objTrans As Transaction
    Dim arrA As Variant
    Dim n As Long

    arrA = Array("Description 1", "Description 2")
    Set sampleCollection = New Collection

    For n = LBound(arrA) To UBound(arrA)
        Set objTrans = New Transaction
        objTrans.DESC = arrA(n)
        sampleCollection.Add objTrans
    Next n

    For n = 1 To sampleCollection.Count
        Set objTrans = sampleCollection.Item(n)
        Debug.Print n & " - " & objTrans.DESC
    Next n

End Function


1 commentaires

Dick, ça a fonctionné !!! Merci! J'ai passé des heures à essayer de comprendre cela. Merci pour l'explication et pour le code nettoyé ... J'aime voir comment d'autres personnes mettraient à jour mon code.



0
votes

La version plus simple aurait été de vous définir N = 0 à Samplecollection.count, car les index d'un tableau démarre avec 0 et votre n commencent par 1 ...

For n = 0 To sampleCollection.Count
    Set objTrans = sampleCollection.Item(n)
    Debug.Print n & " - " & objTrans.DESC
Next n


0 commentaires

0
votes

ne peut pas renseigner la collection VBA avec des objets personnalisés à l'aide de Collection.add

code est la sortie "Description 2" deux fois

En termes simples de base, il est toujours préférable de faire: xxx

et non: xxx

comme le Ce dernier causera des problèmes très subtils et non apparents, et ne peut générer aucune erreur, comme je l'ai récemment découvert.


0 commentaires