2010-07-11 12 views
6

Non capisco perché la riga Debug.Print n & " - " & objTrans2.DESC nella parte inferiore di questo codice emetta due volte "Descrizione 2". Voglio che emetta "Descrizione 1" e "Descrizione 2".Impossibile compilare la raccolta VBA con oggetti personalizzati utilizzando Collection.add

C'è qualcosa di sbagliato nel modo in cui sto tentando di aggiungere un oggetto personalizzato (Transazione) tramite lo sampleCollection.Add dall'interno del ciclo For? Il codice funziona meravigliosamente se aggiungo le stringhe alla raccolta anziché agli oggetti.

Public Function PopCollection() 
    Dim sampleCollection As New Collection 
    Dim objTrans As New Transaction 
    Dim objTrans2 As New Transaction 


    '********** SETUP ARRAY FOR LOOP ************* 
    Dim arrA(0 To 1) As String 
    arrA(0) = "Description 1" 
    arrA(1) = "Description 2" 


    '********** POPULATE COLLECTION ************* 
    For n = 0 To 1 
     objTrans.DESC = arrA(n) 
     Call sampleCollection.Add(objTrans) 
    Next n 


    '********** ITERATE THROUGH COLLECTION ************* 
    For n = 1 To sampleCollection.Count 
     Set objTrans2 = sampleCollection.Item(n) 
     Debug.Print n & " - " & objTrans2.DESC 
    Next n 

End Function 

Qualsiasi aiuto per la newbee è apprezzato!

~~~~~~~~~~~~~~~~~~~~~~~

In risposta alla risposta di Mitch, Ecco le informazioni nella classe di transazione:

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 

Ho solo aggiunto le dichiarazioni di proprietà all'editor VB in Excel ... quindi copio/incollato ciò che era elencato lì.

risposta

6

È necessario creare una nuova istanza di objTrans. Quello che stai facendo è impostare DESC alla descrizione 1, aggiungendo alla raccolta, quindi cambiando DESC alla descrizione 2 (non creando una nuova istanza di objTrans) e aggiungendo la stessa istanza alla raccolta una seconda volta. Ecco come lo farei.

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 
+0

Dick, ha funzionato !!! Grazie! Ho passato ore a cercare di capirlo. Grazie per la spiegazione e per il codice ripulito ... Mi piace vedere come altre persone aggiornerebbero il mio codice. – Eric

1

Una forma leggermente modificata (senza la classe Transaction) funziona come previsto per me. Credo che ci sia un errore nella tua classe Transaction. Puoi pubblicare il codice per questo?

+0

Mitch, ho aggiunto un altro codice alla mia descrizione sopra. Forse potresti dirmi cosa hai usato al posto della mia lezione di Transazione? Forse posso provare a far funzionare il tuo codice sulla mia parte. – Eric

Problemi correlati