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

The following program is an error according to the VB language specification (a method contains both “On Error Goto Label” statement and a lambda – see VB language spec 10.10.2.2). However the Roslyn VB compiler does not report this semantic error (from Compilation.GetDiagnostics). The Roslyn compiler does, however, report the error when attempting to build/emit.

As a rule, all language semantic errors should be reported through Compilation.GetDiagnostics. Only errors that are compiler limitations or an artifact of the translation process may be deferred.

Module Module1

Sub Main()
Dim item = Nothing
If item Is Nothing Then
On Error GoTo Foo
End If
If item IsNot Nothing Then
Dim query = Function() item
End If
Foo:
End Sub

End Module

Tham khảo từ https://github.com/dotnet/roslyn/issues/3675

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.

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 Comment