Hmmm ... cú pháp trông pháp lý đủ mà không có VBA trước mặt tôi. Tôi có đúng là vấn đề của bạn là mã của bạn "biên dịch" và thực hiện mà không gây ra lỗi, nhưng mảng trong bộ sưu tập không bao giờ thay đổi? Nếu vậy, tôi nghĩ rằng đó là vì A.Item (1) của bạn có thể trả lại bản sao của mảng bạn đã lưu trữ trong bộ sưu tập. Sau đó, bạn truy cập và sửa đổi phần tử đã chọn tốt, nhưng nó không có hiệu ứng mà bạn muốn bởi vì nó là một thể hiện mảng sai.
Nói chung, bộ sưu tập VBA hoạt động tốt nhất khi lưu trữ các đối tượng. Sau đó, họ sẽ làm việc như bạn muốn bởi vì họ lưu trữ tài liệu tham khảo. Chúng tốt cho việc lưu trữ các giá trị, nhưng tôi nghĩ rằng chúng luôn sao chép chúng, thậm chí là những cái "lớn" như các biến thể mảng, có nghĩa là bạn không thể thay đổi nội dung của một mảng được lưu trữ.
Hãy xem xét câu trả lời này chỉ là một suy đoán cho đến khi ai đó biết công cụ COM tiềm ẩn tốt hơn. Um ... phân trang Joel Spolsky?
EDIT: Sau khi thử tính năng này trong Excel VBA, tôi nghĩ tôi đúng. Đặt một biến thể mảng trong một bộ sưu tập tạo ra một bản sao, và do đó không nhận được một. Vì vậy, có vẻ như không phải là cách trực tiếp để mã hóa những gì bạn đã thực sự yêu cầu.
Dường như những gì bạn thực sự muốn là một mảng 3-D, nhưng thực tế là bạn đã buộc phải sử dụng bộ sưu tập cho thứ nguyên đầu tiên ngụ ý rằng bạn muốn có thể thay đổi kích thước của nó trong thứ nguyên đó. VBA sẽ chỉ cho phép bạn thay đổi kích thước của kích thước cuối cùng của một mảng (xem "redim preserve" trong phần trợ giúp). Bạn có thể đưa mảng 2-D của bạn bên trong một mảng 1-D mà bạn có thể thay đổi kích thước, mặc dù:
ReDim a(5)
Dim b(2, 2)
a(2) = b
a(2)(1, 1) = 42
ReDim Preserve a(6)
Lưu ý rằng một tuyên bố với ReDim, không Dim trong trường hợp này.
Cuối cùng, hoàn toàn có thể là một số cách tiếp cận khác với bất kỳ điều gì bạn đang cố gắng làm sẽ tốt hơn. Các mảng 3-D có thể thay đổi, dễ phát triển phức tạp và dễ bị lỗi, để nói ít nhất.
Tôi không nghĩ rằng Arr2 (1, 1) = 11 thực sự thay đổi mảng trong bộ sưu tập. Xem câu trả lời đã chỉnh sửa của tôi, nhưng có vẻ như VBA tạo một bản sao của mảng khi thêm vào và đọc từ bộ sưu tập. – jtolle
Có lẽ tôi chỉ bị lừa bởi nhận xét của bạn? Dòng đó thay đổi Arr2, nhưng không thay đổi mảng được lưu trữ trong bộ sưu tập. Tôi thấy nó thay đổi Arr2, nhưng không phải A.Item (1), mà chỉ là một bản sao của Arr2 được thực hiện bởi A.Add (Arr2). – jtolle
@jtolle: xin lỗi, tôi vừa kiểm tra lại và bạn hoàn toàn chính xác. Tôi sẽ cập nhật mã ở trên. Nó là một bản sao của Arr2 trong bộ sưu tập. –