2010-07-11 31 views
6

Tôi không hiểu tại sao dòng Debug.Print n & " - " & objTrans2.DESC ở cuối mã này được xuất ra "Mô tả 2" hai lần. Tôi muốn nó xuất ra "Mô tả 1" và "Mô tả 2".Không thể điền VBA Bộ sưu tập với các đối tượng tùy chỉnh bằng cách sử dụng Collection.add

Có điều gì sai với cách tôi đang cố gắng thêm đối tượng tùy chỉnh (Giao dịch) thông qua sampleCollection.Add từ trong vòng lặp For? Mã hoạt động tuyệt vời nếu tôi thêm chuỗi vào bộ sưu tập thay vì đối tượng.

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 

Bất kỳ trợ giúp nào cho cây mới được đánh giá cao!

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

Để đối phó với phản ứng của Mitch, đây là thông tin trong lớp giao dịch:

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 

Tôi chỉ thêm các khai báo thuộc tính vào trình soạn thảo VB trong Excel ... vì vậy tôi sao chép/dán những gì đã được liệt kê ở đó.

Trả lời

6

Bạn cần tạo một phiên bản mới của objTrans. Những gì bạn đang làm là đặt DESC thành Mô tả 1, thêm vào bộ sưu tập, sau đó thay đổi DESC thành Mô tả 2 (không tạo một thể hiện objTrans mới) và thêm cùng một ví dụ đó vào bộ sưu tập lần thứ hai. Đây là cách tôi sẽ làm điều đó.

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, điều đó đã hiệu quả !!! Cảm ơn! Tôi đã dành hàng giờ để tìm ra điều đó. Cảm ơn bạn đã giải thích và để làm sạch mã ... Tôi thích xem người khác sẽ cập nhật mã của tôi như thế nào. – Eric

1

Biểu mẫu đã sửa đổi một chút (không có lớp Giao dịch) hoạt động như dự định cho tôi. Tôi tin rằng có một lỗi là lớp giao dịch của bạn. Bạn có thể đăng mã cho nó không?

+0

Mitch, tôi đã thêm một số mã vào mô tả của tôi ở trên. Có thể bạn có thể cho tôi biết những gì bạn đã sử dụng thay cho lớp Giao dịch của tôi? Có lẽ tôi có thể cố gắng để có được mã của bạn để làm việc trên kết thúc của tôi. – Eric

Các vấn đề liên quan