Menu

Hỗ trợ xử lý lỗi 'Subscript out of range' khi làm việc với mảng trong VBA

Lô Hướng Dung 13/06/2026 07:08 399 lượt xem 1 trả lời

Chào các bạn,

Mình đang gặp một vấn đề khá khó chịu với lỗi 'Subscript out of range' (Lỗi chỉ số ngoài phạm vi) khi làm việc với mảng trong VBA. Cụ thể là mình đang cố gắng gán giá trị cho một phần tử trong mảng động nhưng lại nhận được thông báo lỗi này.

Mình có đoạn code như sau:

Dim myArray() As Variant
ReDim myArray(1 To 5)
' ... một số xử lý khác ...
myArray(6) = "Giá trị mới"

Mình hiểu rằng lỗi này xảy ra khi mình truy cập vào một chỉ số không tồn tại trong mảng. Tuy nhiên, trong ví dụ trên, mình đã khai báo mảng có kích thước từ 1 đến 5, và mình đang cố gắng gán giá trị cho chỉ số thứ 6. Điều này rõ ràng là sai.

Vấn đề của mình là trong thực tế, kích thước mảng của mình được xác định động dựa trên dữ liệu lấy từ một phạm vi khác, và đôi khi số lượng phần tử thực tế lại nhiều hơn số lượng mình dự kiến ban đầu, dẫn đến việc cố gắng truy cập vào chỉ số vượt quá giới hạn.

Các bạn có kinh nghiệm xử lý tình huống này như thế nào? Có cách nào để kiểm tra kích thước mảng hiện tại trước khi gán giá trị hoặc mở rộng mảng một cách an toàn hơn không?

Mình đang tìm kiếm các giải pháp hoặc các best practice để tránh lỗi này trong tương lai. Rất mong nhận được sự giúp đỡ từ cộng đồng!

Cảm ơn mọi người!

3

Chào bạn,

Vấn đề bạn gặp với lỗi 'Subscript out of range' khi gán giá trị cho myArray(6) là do mảng của bạn chỉ được định kích thước từ 1 đến 5 thôi. Khi bạn gán cho vị trí thứ 6, nó đã vượt ra ngoài phạm vi cho phép.

Nếu bạn muốn mảng có thể chứa đến 6 phần tử, bạn cần thay đổi dòng ReDim myArray(1 To 5) thành ReDim myArray(1 To 6) hoặc sử dụng ReDim Preserve nếu bạn muốn giữ lại dữ liệu cũ.

Chúc bạn xử lý thành công!

2

Bạn cần đăng nhập để trả lời chủ đề này.

Đăng nhập Đăng ký