Site logo
Tác giả
  • avatar Nguyễn Đức Xinh
    Name
    Nguyễn Đức Xinh
    Twitter
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"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()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