Visual Basic for Applications (VBA) là triển khai ngôn ngữ lập trình Visual Basic do Microsoft phát triển. VBA có thể dùng để kích hoạt UDF, tự động hóa tác vụ và truy cập WinAPI thông qua DLL. Tuy nhiên, gần đây nhiều báo cáo cho thấy người dùng không thể thực thi một số lệnh và lỗi "Subscript Out of Range, Error 9" xuất hiện khi cố gắng làm vậy.
Nguyên nhân gây lỗi "Subscript Out of Range" trong VBA
Sau khi nhận nhiều báo cáo từ người dùng, chúng tôi quyết định điều tra và thiết kế bộ giải pháp khắc phục hoàn toàn. Chúng tôi cũng xem xét các lý do kích hoạt lỗi và liệt kê như sau.
- Phần tử không tồn tại: Trong một số trường hợp, bạn có thể đã tham chiếu đến một phần tử trong lệnh không tồn tại. Có thể subscript lớn hơn hoặc nhỏ hơn phạm vi subscript có thể hoặc kích thước mảng chưa được gán tại thời điểm đó trong ứng dụng.
- Phần tử không xác định: Có thể bạn chưa xác định số lượng phần tử trong mã, điều quan trọng là số phần tử trong mảng phải được xác định bằng lệnh "Dim" hoặc "ReDim".
- Thành viên Collection không đúng: Trong một số trường hợp, người dùng có thể tham chiếu đến thành viên collection không tồn tại. Nếu tham chiếu không đúng về thành viên collection, lỗi này có thể được kích hoạt.
- Script viết tắt: Có thể bạn đã dùng dạng viết tắt của subscript và nó ngầm chỉ định một phần tử không hợp lệ. Việc sử dụng tên khóa hợp lệ là quan trọng.
Bây giờ bạn đã hiểu cơ bản về bản chất vấn đề, chúng ta sẽ chuyển sang giải pháp. Hãy thực hiện theo thứ trình tự cụ thể để tránh xung đột.
Giải pháp 1: Kiểm tra Mảng (Arrays)
Có thể bạn đã định nghĩa giá trị không đúng cho phần tử Mảng. Do đó, khuyến nghị kiểm tra lại giá trị bạn định nghĩa cho phần tử Mảng và đảm bảo nó đúng. Cũng kiểm tra khai báo mảng và xác minh giới hạn trên và dưới. Nếu mảng đã được thay đổi kích thước, hãy dùng hàm LBound và UBound để điều kiện truy cập. Kiểm tra chính tả tên biến nếu chỉ số là biến.
Giải pháp 2: Chỉ định số lượng phần tử
Trong một số trường hợp, có thể bạn chưa định nghĩa số lượng phần tử trong mã khiến lỗi được kích hoạt. Khuyến nghị chỉ định số lượng phần tử trong mảng bằng hàm Dim hoặc ReDim.
Giải pháp 3: Thay đổi cấu trúc (Construct)
Lỗi này thường được kích hoạt khi người dùng chỉ định thành viên collection không đúng hoặc không tồn tại. Do đó, thay vì chỉ định chỉ số phần tử, khuyến nghị tiếp cận với cấu trúc "For Each...Next".
Giải pháp 4: Kiểm tra Keyname và Index
Trong một số trường hợp, có thể bạn đã dùng dạng viết tắt của subscript và nó chỉ định phần tử không hợp lệ. Do đó, khuyến nghị sử dụng tên khóa hợp lệ và chỉ số cho collection.