Невозможно заполнить VBA Collection пользовательскими объектами с помощью Collection.add - PullRequest
6 голосов
/ 11 июля 2010

Я не понимаю, почему строка Debug.Print n & " - " & objTrans2.DESC внизу этого кода выдает «Описание 2» дважды.Я хочу, чтобы он вывел «Description 1» и «Description 2».

Что-то не так с тем, как я пытаюсь добавить пользовательский объект (Transaction) через sampleCollection.Add из цикла For?Код прекрасно работает, если я добавляю строки в коллекцию вместо объектов.

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

Любая помощь для новичка приветствуется!

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

В ответ на ответ Митча вот информация в классе Transaction:

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

Я только добавил объявления свойств в редактор VB в Excel ... поэтому я скопировал / вставил то, что там было указано.

Ответы [ 2 ]

6 голосов
/ 11 июля 2010

Вам нужно сделать новый экземпляр objTrans.Что вы делаете, устанавливаете DESC в Description 1, добавляете в коллекцию, затем меняете DESC в Description 2 (не создавая новый экземпляр objTrans) и добавляете тот же самый экземпляр в коллекцию во второй раз.Вот как бы я это сделал.

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 голос
/ 11 июля 2010

Слегка измененная форма (без класса Transaction) работает так, как мне нужно. Я считаю, что есть ошибка в вашем классе транзакций. Можете выложить код для него?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...