- Tác giả
- Name
- Nguyễn Đức Xinh
- Ngày xuất bản
- Ngày xuất bản
Các lỗi thường gặp trong VBA – Cách nhận biết và khắc phục
Khi viết VBA trong Microsoft Access hoặc Excel, bạn có thể gặp phải các lỗi thông dụng như: Type mismatch, Object required, Subscript out of range,... Những lỗi này không chỉ gây gián đoạn chương trình mà còn gây khó khăn nếu bạn chưa quen với cách debug trong VBA.
Bài viết này sẽ tổng hợp các lỗi phổ biến nhất, đi kèm ví dụ thực tế và hướng xử lý rõ ràng để bạn dễ dàng nắm bắt và tránh lặp lại sai lầm.
1. Type mismatch (Lỗi sai kiểu dữ liệu)
🔹 Mô tả:
Khi bạn cố gắng gán một giá trị có kiểu dữ liệu không khớp với biến đã khai báo.
🔹 Ví dụ:
Dim age As Integer
age = "twenty"
🔻 Kết quả: Lỗi Type mismatch vì "twenty"
là chuỗi, không thể gán cho Integer
.
✅ Cách xử lý:
- Đảm bảo kiểu dữ liệu khớp nhau
- Dùng các hàm chuyển đổi:
CInt()
,CLng()
,CDbl()
,CStr()
,...
age = CInt("20") ' OK
2. Object required (Lỗi thiếu đối tượng)
🔹 Mô tả:
Gọi một method hoặc thuộc tính từ một biến object chưa được khởi tạo.
🔹 Ví dụ:
Dim rs As Recordset
rs.MoveNext ' Lỗi tại đây vì rs chưa Set
🔻 Kết quả: Object required
✅ Cách xử lý:
Set rs = CurrentDb.OpenRecordset("SELECT * FROM Customers")
rs.MoveNext ' OK
📌 Nhớ luôn dùng
Set
với object!
3. Subscript out of range (Truy cập vượt giới hạn mảng)
🔹 Mô tả:
Khi bạn truy cập vào phần tử không tồn tại trong mảng hoặc collection.
🔹 Ví dụ:
Dim arr(1 To 3) As Integer
arr(4) = 10
🔻 Kết quả: Lỗi Subscript out of range
✅ Cách xử lý:
- Kiểm tra chỉ số mảng bằng
UBound()
vàLBound()
- Dùng vòng lặp để tránh vượt giới hạn
Dim i As Integer
For i = LBound(arr) To UBound(arr)
Debug.Print arr(i)
Next i
4. Variable not defined (Chưa khai báo biến)
🔹 Mô tả:
Xảy ra khi bạn bật Option Explicit
mà sử dụng biến chưa khai báo.
🔹 Ví dụ:
Option Explicit
total = 100 ' Lỗi: total chưa được Dim
✅ Cách xử lý:
Dim total As Long
total = 100
💡 Option Explicit nên luôn bật để tránh lỗi chính tả biến.
5. Division by zero (Chia cho 0)
🔹 Mô tả:
Khi bạn thực hiện phép chia mà mẫu số bằng 0.
🔹 Ví dụ:
result = 100 / 0
🔻 Kết quả: Lỗi chia cho 0
✅ Cách xử lý:
If denominator <> 0 Then
result = numerator / denominator
Else
MsgBox "Mẫu số không được bằng 0"
End If
6. Run-time error '91': Object variable or With block variable not set
🔹 Mô tả:
Thường gặp khi bạn dùng With
hoặc gọi thuộc tính từ object chưa Set
.
🔹 Ví dụ:
Dim frm As Form
With frm
.Caption = "Hello"
End With
🔻 Kết quả: Lỗi vì frm
chưa Set object
✅ Cách xử lý:
Set frm = Forms("frmCustomer")
With frm
.Caption = "Hello"
End With
7. Syntax Error
🔹 Mô tả:
Lỗi cú pháp do thiếu dấu, từ khóa sai, hoặc cấu trúc không hợp lệ.
🔹 Ví dụ:
If a > 5 MsgBox "Hello"
🔻 Kết quả: Lỗi cú pháp vì thiếu Then
✅ Cách xử lý:
If a > 5 Then MsgBox "Hello"
🎯 Gợi ý thêm – Cách debug hiệu quả
- F8: chạy từng dòng
- Ctrl + Break: dừng chương trình
- Debug.Print: in ra giá trị biến
- Immediate Window: kiểm tra giá trị, chạy lệnh
🧩 Tổng kết
Lỗi phổ biến | Nguyên nhân thường gặp |
---|---|
Type mismatch | Sai kiểu dữ liệu khi gán giá trị |
Object required | Dùng object chưa Set |
Subscript out of range | Truy cập sai chỉ số mảng |
Variable not defined | Thiếu khai báo biến với Option Explicit |
Division by zero | Chia cho 0 |
Run-time error '91' | Object chưa khởi tạo |
Syntax error | Cú pháp sai |