Hướng dẫn cách bẫy lỗi khi viết code trong VBA

Làm việc với Visual Basic for Applications (VBA) trong Excel thật tuyệt vời, nhưng không thể tránh khỏi việc gặp lỗi. Điều quan trọng là chúng ta cần biết cách xử lý và bẫy lỗi khi viết mã VBA để đảm bảo ứng dụng của mình hoạt động một cách trơn tru.

Cách 1: On Error Goto <label>

1.1 On Error Goto -1

On Error Goto -1 là một trong những cách bẫy lỗi cơ bản nhất trong VBA. Ở đây, <label> có thể là:

1.1.1. Giá trị số -1

vba
On Error Goto -1

1.1.2. Giá trị số 0

vba
On Error Goto 0

1.1.3. Đi tới một nội dung xử lý lỗi cụ thể

vba
On Error Goto ThongBaoLoi

1.2. Ví dụ thực tế

Hãy xem ví dụ sau đây:

vba
Sub BayLoi_Test01()
Dim a As Long, b As Long
a = Sheet1.Cells(1, 1).Value
b = Sheet1.Cells(2, 1).Value
On Error GoTo Loi
Sheet1.Cells(3, 1).Value = a / b
MsgBox “ok!”Loi:
If Err.Number = 11 Then
MsgBox “Loi chia cho 0”
End If
End Sub

Trong ví dụ này, nếu số bị chia là 0, chương trình sẽ xuất hiện lỗi. Chúng ta cần bẫy lỗi này để chương trình hoạt động bình thường. Nếu phép chia A1 / A2 ra kết quả bình thường, bạn sẽ nhận được một thông báo “ok!”. Nhưng nếu phép chia này có lỗi (Err.Number = 11 là lỗi chia cho 0), chương trình sẽ xử lý nó một cách đúng đắn.

1.3. Phân biệt On Error Goto -1 và On Error Goto 0

  • On Error Goto 0 đưa cơ chế bẫy lỗi về dạng cơ bản của VBA và sẽ thông báo lỗi bằng msgbox theo cơ chế mặc định. Thường sử dụng khi muốn tắt chức năng bẫy lỗi đã thiết lập trước đó trong cùng một câu lệnh.
  • On Error Goto -1 là xóa bỏ cơ chế bẫy lỗi trước đó để thay bằng một cơ chế bẫy lỗi khác. Dòng lệnh này thường được gắn liền với một dòng lệnh bẫy lỗi khác.

Cách 2: On Error Resume Next

Khi sử dụng cách bẫy lỗi này, từ vị trí dòng lệnh bẫy lỗi này trở đi, nếu gặp bất kỳ lỗi nào, chương trình sẽ bỏ qua lỗi đó mà không có bất kỳ thông báo nào.

2.1. Ưu điểm và nhược điểm

Ưu điểm:

  • Sử dụng nhanh, không phải lo chương trình bị dừng lại bởi bất kỳ lỗi nào.

Nhược điểm:

  • Chỉ bỏ qua lỗi mà không sửa lỗi, không thông báo lỗi nên sẽ khiến chương trình vẫn tồn tại lỗi, dẫn tới sai sót mà không rõ ở đâu. Đặc biệt nên tránh sử dụng khi chưa thuần thục kỹ thuật bẫy lỗi trong VBA.

2.2. Sử dụng thường xuyên

Thường sử dụng trong những đoạn mã ngắn, thực hiện những thao tác đã rõ ràng và không cần quan tâm tới các kết quả sai, lỗi. Có thể kết hợp với lệnh On Error Goto 0 để dừng việc bẫy lỗi bởi On Error Resume Next cho những dòng lệnh tiếp theo, chỉ bỏ qua lỗi trong một số đoạn câu lệnh nhất định.

2.3. Ví dụ

vba
Sub BayLoi_Test02()
Dim a As Long, b As Long
a = Sheet1.Cells(1, 1).Value
b = Sheet1.Cells(2, 1).Value
‘ Bỏ qua lỗi khi thực hiện phép chia
On Error Resume Next
Sheet1.Cells(3, 1).Value = a / b
MsgBox “ok!”‘ Mở lại chức năng thông báo lỗi
On Error Goto 0
End Sub

FAQs (Câu hỏi thường gặp)

1. Tại sao tôi nên sử dụng bẫy lỗi trong VBA?

Sử dụng bẫy lỗi giúp bạn xử lý các tình huống lỗi một cách điều khiển, đảm bảo ứng dụng của bạn luôn hoạt động một cách trơn tru.

2. Khi nào thì nên sử dụng On Error Goto và On Error Resume Next?

On Error Goto thích hợp khi bạn muốn xử lý lỗi một cách cụ thể, trong khi On Error Resume Next thích hợp khi bạn muốn bỏ qua lỗi và tiếp tục chương trình.

3. Tôi cần phải biết lập trình VBA trước khi sử dụng bẫy lỗi?

Có, để hiểu rõ cách sử dụng bẫy lỗi, bạn cần có kiến thức về lập trình VBA cơ bản.

4. Tôi có thể kết hợp cả hai cách bẫy lỗi không?

Có, bạn có thể kết hợp cả On Error Goto và On Error Resume Next trong cùng một đoạn mã VBA để xử lý lỗi một cách linh hoạt.

5. Có nguồn học VBA nào bạn đề xuất?

Học Excel Online là một nguồn tài liệu tốt để bắt đầu học VBA và bẫy lỗi trong VBA.

Leave a Reply