Try Catch VBA Access

Đã 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.

  1. Try Catch VBA Access
  2. Các cơ chế xử lý lỗi trong VBA
  3. Err.Number (mã lỗi) trong VBA
  4. Một số kinh nghiệm trong bẩy lỗi VBA Access

1. Try Catch VBA Access

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).

Tại sao cần bẫy lỗi trong lập trình

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ã.

2. Các cơ chế xử lý lỗi trong VBA

    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.

Ví dụ sử dụng On Error GoTo để bắt lỗi

   

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


Giải thích:

    On Error GoTo ErrorHandler: Kích hoạt cơ chế xử lý lỗi và chuyển điều khiển đến nhãn ErrorHandler nếu có lỗi.
    Lỗi chia cho 0: Dòng x = 5 / y sẽ gây ra lỗi chia cho 0, làm cho VBA nhảy đến nhãn ErrorHandler.
    Err.Description: Chứa mô tả lỗi (ví dụ: "Division by zero").
    Resume Next: Sau khi xử lý lỗi, mã tiếp tục thực thi từ dòng tiếp theo sau khi gặp lỗi.

Ví dụ  sử dụng On Error Resume Next để bỏ qua 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..."


Giải thích:

    On Error Resume Next: Khi lỗi xảy ra, VBA sẽ bỏ qua lỗi và tiếp tục thực thi mã mà không nhảy đến bất kỳ nhãn nào.
    Kiểm tra lỗi: Nếu bạn muốn kiểm tra xem có lỗi xảy ra sau khi dòng mã có lỗi, bạn có thể kiểm tra thuộc tính Err.Number.

Ví dụ đóng cơ chế xử lý lỗi

  

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


Giải thích:

    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 (dừng chương trình khi gặp lỗi).

3. Err.Number (mã lỗi) trong VBA

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.

Cách sử dụng Err.Number

    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".

Ví dụ sử dụng Err.Number trong VBA

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

 

Các mã lỗi phổ biến trong VBA

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.

4. Một số kinh nghiệm trong bẩy lỗi VBA Access

   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:

Bài viết liên quan:

Đã 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.