2015-03-12 19 views
6

Có cách nào để tham gia bộ sưu tập trong VBA không? Tôi có thể tìm thấy tham gia (mảng, ";"), nhưng chức năng này không thể áp dụng cho bộ sưu tập.Cách tham gia bộ sưu tập trong VBA

Cảm ơn.

+0

Hãy xem [những gì anh chàng này đã làm] (https://github.com/ ptwales/VBEX) - phương thức ['List.ToString'] (https://github.com/ptwales/VBEX/blob/master/src/List.cls#L452-L461) sẽ làm những gì bạn muốn làm ở đây. –

Trả lời

8

Thật không may, không, không có gì tích hợp sẵn.

Bạn sẽ phải hoặc là

  • chuyển đổi bộ sưu tập để một mảng (không có built-in cho rằng một trong hai, bạn sẽ phải loop through all the items) và sau đó sử dụng Join(array, ";") hoặc

  • tham gia bộ sưu tập của bạn "theo cách khó" (đặt cờ first, lặp qua các mục, thêm ";" nếu không first, xóa first, thêm mục).

1

Tôi cần làm rõ rằng những điều sau đây KHÔNG phải là câu trả lời cho câu hỏi ở trên. Tuy nhiên, đối với bất cứ ai đến đây tự hỏi làm thế nào để hợp nhất các bộ sưu tập (xảy ra với tôi), mã dưới đây sẽ bổ sung thêm các nội dung của một bộ sưu tập (col2) khác (col1):

Sub addColToCol(col1 As Collection, col2 As Collection) 
    Dim i As Integer 

    For i = 1 To col2.Count 
     col1.Add col2.Item(i) 
    Next i 
End Sub 

Nếu bạn muốn giữ gìn nội dung của từng bộ sưu tập, kê khai một bộ sưu tập bổ sung.

Dim super_col As New Collection 

addColToCol super_col, col1 
addColToCol super_col, col2 
+0

Đây không phải là câu trả lời cho câu hỏi OP (có thể là câu hỏi khác, nhưng không phải câu hỏi này) –

+0

làm thế nào để nhận được phiếu bầu, nhưng câu trả lời đã chọn chỉ là "KHÔNG" –

+1

Cảm ơn, tôi đã không nhận thấy. Tôi đã thực sự tìm kiếm cách hợp nhất các bộ sưu tập và đây là kết quả tìm kiếm đầu tiên tôi nhận được, vì vậy tôi nghĩ tôi sẽ thêm câu trả lời cho bất kỳ ai tình cờ gặp bài đăng này đang tìm kiếm trợ giúp. –

1

Đây là làm thế nào để tham gia nó:

Join(CollectionToArray(colData), ",") 

Và chức năng:

Public Function CollectionToArray(myCol As Collection) As Variant 

    Dim result As Variant 
    Dim cnt  As Long 

    ReDim result(myCol.Count - 1) 

    For cnt = 0 To myCol.Count - 1 
     result(cnt) = myCol(cnt + 1) 
    Next cnt 

    CollectionToArray = result 

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