Là bắt lỗi khi phát sinh từ VBA, phải chuyển hướng đến 1 vị trí nào đó.
Nếu không dùng try cach thì hệ thống tự chuyển đến code gây khó hiểu cho người dùng.
Trong VBA (Visual Basic for Applications) trong Access, không có cơ chế try-catch như trong các ngôn ngữ lập trình khác (ví dụ: C#, Java, Python).
Với hình trên bạn biết được tại sao cần bẫy lỗi và tầm quan trọng của nó trong lập trình (vba nói riêng) và các ngôn ngữ khác nói chung như thế nào.
Tuy nhiên, bạn có thể xử lý lỗi trong VBA bằng cách sử dụng câu lệnh On Error. Câu lệnh này cho phép bạn bắt và xử lý các lỗi xảy ra trong quá trình thực thi mã.
On Error GoTo: Chuyển điều khiển đến một nhãn nếu xảy ra lỗi.
On Error Resume Next: Tiếp tục thực thi mã mà không xử lý lỗi, giúp bỏ qua lỗi.
On Error GoTo 0: Tắt chế độ xử lý lỗi và khôi phục lại hành vi mặc định khi có lỗi.
Ví dụ về cách sử dụng On Error GoTo như một cách thức xử lý lỗi trong VBA Access.
On Error GoTo ErrorHandler ' Kích hoạt cơ chế xử lý lỗi
' Code có thể gây lỗi
Dim x As Integer
Dim y As Integer
y = 0
x = 5 / y ' Dòng này sẽ gây lỗi chia cho 0
Exit Sub ' Thoát khỏi thủ tục nếu không có lỗi
ErrorHandler: ' Nếu có lỗi, thực thi đến đây
MsgBox "Có lỗi xảy ra: " & Err.Description ' Hiển thị thông báo lỗi
Resume Next ' Tiếp tục thực thi mã sau khi xử lý lỗi
On Error Resume Next ' Bỏ qua lỗi và tiếp tục thực thi mã
' Code có thể gây lỗi
Dim x As Integer
Dim y As Integer
y = 0
x = 5 / y ' Dòng này sẽ gây lỗi chia cho 0
If Err.Number <> 0 Then ' Kiểm tra nếu có lỗi
MsgBox "Có lỗi xảy ra, nhưng lỗi đã bị bỏ qua."
End If
MsgBox "Mã tiếp tục thực thi..."
On Error GoTo ErrorHandler ' Kích hoạt xử lý lỗi
' Code có thể gây lỗi
Dim x As Integer
Dim y As Integer
y = 0
x = 5 / y ' Lỗi chia cho 0
' Tắt cơ chế xử lý lỗi
On Error GoTo 0 ' Tắt chế độ xử lý lỗi
' Tiếp tục thực thi mã mà không có xử lý lỗi
MsgBox "Tiếp tục thực thi mà không có xử lý lỗi!"
Exit Sub
ErrorHandler:
MsgBox "Có lỗi: " & Err.Description
Err.Number trong VBA là một thuộc tính của đối tượng Err, được sử dụng để trả về mã số của lỗi xảy ra trong chương trình. Mã lỗi này giúp bạn xác định loại lỗi mà chương trình gặp phải, từ đó có thể thực hiện các hành động xử lý lỗi phù hợp.
Err.Number chứa mã lỗi mà hệ thống VBA gặp phải khi có lỗi xảy ra. Nếu không có lỗi, giá trị của Err.Number sẽ là 0.
Các mã lỗi thường được trả về dưới dạng số nguyên. Ví dụ, mã lỗi 5 là lỗi "Invalid procedure call or argument", còn mã lỗi 11 là lỗi "Division by zero".
On Error GoTo ErrorHandler ' Định nghĩa phần xử lý lỗi
Dim x As Integer
Dim y As Integer
Dim result As Double
x = 10
y = 0 ' Lỗi chia cho 0
result = x / y ' Phép chia gây lỗi
Exit Sub ' Nếu không có lỗi, thoát khỏi Sub
ErrorHandler:
MsgBox "Lỗi xảy ra! Mã lỗi: " & Err.Number & vbCrLf & "Chi tiết lỗi: " & Err.Description
if Err.Number =6 then
Msgbox "Mo ta loi voi Number=6"
end if
Mã Lỗi Tên Lỗi Mô Tả
5 Invalid procedure call or argument Lỗi khi gọi một hàm hoặc thủ tục với tham số không hợp lệ.
6 Overflow Lỗi tràn số khi một phép toán vượt quá giới hạn của kiểu dữ liệu.
9 Subscript out of range Lỗi khi chỉ số mảng hoặc tên đối tượng không hợp lệ.
11 Division by zero Lỗi khi thực hiện phép chia cho 0.
13 Type mismatch Lỗi khi kiểu dữ liệu không tương thích (chẳng hạn, cố gắng gán chuỗi cho một biến kiểu số).
52 Bad file name or number Lỗi khi tệp hoặc số không hợp lệ.
53 File not found Lỗi khi không tìm thấy tệp được chỉ định.
91 Object variable or With block variable not set Lỗi khi sử dụng biến đối tượng mà chưa gán giá trị cho nó.
Tóm lại:
Err.Number là thuộc tính giúp bạn xác định mã lỗi khi có lỗi xảy ra trong VBA.
Bạn có thể sử dụng Err.Number để phân loại và xử lý các lỗi khác nhau trong ứng dụng của mình.
Việc sử dụng Err.Number kết hợp với Err.Description sẽ cung cấp thông tin chi tiết về lỗi, giúp bạn dễ dàng chẩn đoán và xử lý các lỗi trong mã VBA.
Khi làm phần mềm VBA Access bạn nhất định phải sử dụng bẩy lỗi, vì nó tạo ra hiệu quả cho phần mềm.
Không một lập trình viên nào tài giỏi mà nói viết không có lỗi, nhưng phải dự đoán được lỗi trong tương lai mà ta bẩy để theo kích bản như ý của mình.
Cần nắm và nhớ rõ các cú pháp sau về bẩy lỗi:
On Error GoTo <label>: Chuyển điều khiển đến một nhãn khi có lỗi và xử lý lỗi ở đó.
On Error Resume Next: Bỏ qua lỗi và tiếp tục thực thi mã mà không xử lý.
On Error GoTo 0: Tắt cơ chế xử lý lỗi và khôi phục lại hành vi mặc định của VBA khi có lỗi.
Dù không có cơ chế try-catch như trong các ngôn ngữ khác, bạn vẫn có thể xử lý lỗi rất linh hoạt trong VBA Access bằng cách sử dụng các phương thức xử lý lỗi trên.
Tìm kiếm:
Đã làm phần mềm phải sử dụng bẫy lỗi, điều cần thiết nhất của lập trình viên phải biết từ khóa try catch.