Với đoạn code ở trên (có đính kèm project mẫu ở dưới), mình test lỗi bằng cách cho Redim mảng động aryTest() được truyền như là một đối số cho thủ tục TestAryVsWithStm.
Về mặt lý thuyết, code ở thủ tục Command1_Click và Command2_Click là như nhau. Chỉ là ở Command2_Click có sử dụng statement: "With ... End With" để đơn giản hóa code. (https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/with-end-with-statement)
Khi gọi thủ tục Command1_Click thì code hoạt động bình thường.
Nhưng khi gọi thủ tục Command2_Click thì sẽ nhận được 1 lỗi: This array is fixed or temporarily locked.
Mình có google về lỗi này nhưng hầu như toàn nêu lý do tương tự như bài viết của msdn, hoặc có thể mình tìm chưa kĩ: https://msdn.microsoft.com/en-us/library/aa231012(v=vs.60).aspx
Cái lỗi này khiến mình bị ăn hành suốt 2 hôm trời, thậm chí mình có thử dùng API "__vbaAryUnlock" trong "msvbvm60.dll" nhưng vẫn không khắc phục được.
Mò mẫm đến giờ mới té ngữa ra là do sử dụng statement: "With ... End With".

Nay mạn phép viết bài này chia sẻ với mong muốn có thể giúp được phần nào cho những ai gặp trường hợp giống mình. Nếu bài viết có gì sai sót thì rất mong mọi người có thể góp ý để hoàn thiện.
Thanks!