2010-07-11 6 views
6

No entiendo por qué la línea Debug.Print n & " - " & objTrans2.DESC en la parte inferior de este código está produciendo "Descripción 2" dos veces. Quiero que muestre "Descripción 1" y "Descripción 2".No se puede completar la colección VBA con objetos personalizados utilizando Collection.add

¿Hay algún problema con la forma en que trato de agregar un objeto personalizado (Transacción) a través del sampleCollection.Add desde dentro del bucle For? El código funciona maravillosamente si agrego cadenas a la colección en lugar de objetos.

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 

¡Se agradece cualquier ayuda para newbee!

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

En respuesta a la respuesta del Mitch, aquí está la información en la clase de transacción:

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 

Solo agregué las declaraciones de propiedades al editor de VB en Excel ... así que copié/pegué lo que allí figuraba.

Respuesta

6

Debe realizar una nueva instancia de objTrans. Lo que está haciendo es configurar DESC en la Descripción 1, agregar a la colección, luego cambiar DESC a Descripción 2 (no hacer una nueva instancia de objTrans), y agregar esa misma instancia a la colección por segunda vez. Así es como lo haría.

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, eso funcionó! ¡Gracias! Pasé horas tratando de resolver eso. Gracias por la explicación y por el código limpio ... Me gusta ver cómo otras personas actualizarían mi código. – Eric

1

Una forma ligeramente modificada (sin la clase de Transacción) funciona según lo previsto para mí. Creo que hay un error es su clase de Transacción. ¿Puedes publicar el código para ello?

+0

Mitch, He añadido un poco más de código a mi descripción anterior. ¿Puede decirme qué utilizó en lugar de mi clase Transaction? Tal vez pueda intentar que tu código funcione en mi extremo. – Eric

Cuestiones relacionadas