VBA về báo cáo lỗi - 3 cách hàng đầu để xử lý lỗi

Excel VBA về tuyên bố lỗi

Câu lệnh VBA On Error là một loại cơ chế xử lý lỗi được sử dụng để hướng dẫn mã làm gì nếu nó gặp bất kỳ loại lỗi nào, nói chung khi mã gặp lỗi, việc thực thi sẽ dừng lại nhưng với câu lệnh này trong mã, việc thực thi mã tiếp tục vì nó có tập hợp các hướng dẫn phải làm khi nó gặp lỗi.

Dự đoán lỗi trong mã giúp bạn trở thành chuyên gia về mã hóa VBA. Bạn không thể làm cho mã hiệu quả 100%. Ngay cả khi bạn tự tin về mã của mình theo cách này hay cách khác, nó có thể gây ra lỗi.

Việc xác định và xử lý mọi loại lỗi gần như là một nhiệm vụ bất khả thi, nhưng chúng ta có những cách khác nhau để xử lý lỗi trong VBA. Trong khi viết mã, bạn có thể không lường trước được loại mã lỗi có thể xuất hiện, nhưng nếu có bất kỳ lỗi nào xảy ra, bạn sẽ dành nhiều thời gian để gỡ lỗi hơn là tự viết mã.

Lỗi là gì?

Lỗi không là gì ngoài việc một dòng mã không thể thực thi được vì chức năng hoặc mã sai. Vì vậy, hãy cố gắng lường trước lỗi và xử lý.

Ví dụ: nếu bạn cố gắng xóa trang tính không có ở đó, thì rõ ràng là chúng ta không thể thực thi dòng mã đó.

Lỗi có ba loại, một là lỗi biên dịch do các biến không được khai báo. Lỗi thứ hai là lỗi nhập dữ liệu do lập trình viên nhập sai và lỗi thứ ba là lỗi thời gian chạy do VBA không thể nhận dạng dòng mã. Để cố gắng truy cập hoặc làm việc trên trang tính hoặc sổ làm việc không có ở đó.

Nhưng chúng tôi có một câu lệnh trong VBA để xử lý tất cả các loại lỗi này, tức là câu lệnh "On Error".

Các loại tuyên bố về lỗi

Điểm quan trọng của việc xử lý lỗi trong VBA là câu lệnh "On Error". Ví dụ: On Error, “tiếp tục dòng tiếp theo”, “chuyển đến hoặc chuyển sang dòng khác,” v.v.…

Câu lệnh On Error có ba loại câu lệnh.

  1. GoTo 0 có nghĩa là bất cứ khi nào lỗi thời gian chạy xảy ra, excel hoặc VBA sẽ hiển thị hộp thông báo lỗi cho biết loại lỗi mà nó đã gặp phải. Ngay sau khi VBA thực thi mã, nó sẽ vô hiệu hóa tất cả các trình xử lý lỗi trong khối cụ thể đó trên mã.
  2. Tiếp tục Tiếp theo có nghĩa là bất cứ khi nào lỗi xảy ra, câu lệnh này sẽ hướng dẫn excel bỏ qua lỗi đó và chuyển sang (tiếp tục tiếp theo) dòng mã tiếp theo mà không hiển thị bất kỳ thông báo lỗi nào. Nó không có nghĩa là nó sẽ sửa lỗi; đúng hơn, nó chỉ bỏ qua lỗi.
  3. GoTo (nhãn) có nghĩa là bất cứ khi nào VBA gặp lỗi, hãy chuyển đến nhãn được chỉ định. Điều này làm cho mã chuyển đến dòng cụ thể do người lập trình cung cấp.

3 cách hàng đầu để xử lý lỗi trong VBA

# 1 - Khi xảy ra lỗi Tiếp tục lại tiếp theo

Giả sử bạn đang chia giá trị của 20 cho 0 và bạn đã khai báo biến để gán kết quả của phép chia cho nó.

Mã:

Sub OnError_Example1 () Dim i As Integer i = 20/0 End Sub

Nếu bạn chạy mã này, nó sẽ xuất hiện lỗi bên dưới.

Vì vậy, bạn không thể chia bất kỳ số nào cho giá trị 0. Số lỗi thời gian chạy là 11, tức là, Phân chia theo số không.

Bây giờ tôi sẽ thêm một dòng nữa vào mã.

Mã:

Sub OnError_Example1 () Dim i As Integer, j As Integer i = 20/0 j = 20/2 End Sub

Bây giờ tôi sẽ thêm câu lệnh Tiếp tục lỗi tiếp theo ở trên cùng.

Mã:

Sub OnError_Example1 () Dim i As Integer, j As Integer On Error Resume Next i = 20/0 j = 20/2 End Sub

Bây giờ, nếu tôi thực thi mã này, nó sẽ không cho tôi bất kỳ thông báo lỗi nào; thay vào đó, nó sẽ thực thi dòng mã tiếp theo, tức là, j = 20/2.

# 2 - Trên nhãn GoTo Lỗi

Tôi đã khai báo ba biến.

Mã:

Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer

Đối với tất cả ba biến này, tôi sẽ chỉ định một phép tính chia.

Mã:

Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5

Kết quả của cả ba phép tính này sẽ được hiển thị trong hộp thông báo.

Mã:

Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5 MsgBox "Giá trị của i là" & i & vbNewLine & "Giá trị của j là "& j & _ vbNewLine &" Giá trị của k là "& k & vbNewLine End Sub

Bây giờ tôi sẽ cố gắng thực thi đoạn mã này vì cách tính “I” không đúng. Chúng tôi sẽ gặp lỗi thời gian chạy 11.

Bây giờ tôi sẽ thêm câu lệnh “On Error Resume Next”.

Mã:

Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error Resume Next i = 20/0 j = 20/2 k = 10/5 MsgBox "Giá trị của i là" & i & vbNewLine & "The giá trị của j là "& j & _ vbNewLine &" Giá trị của k là "& k & vbNewLine End Sub

Nếu tôi thực hiện điều này, nó sẽ bỏ qua phép tính “I” và thực hiện hai phép tính còn lại, và kết quả như sau.

Bây giờ thay vì “Khi Lỗi Tiếp tục Tiếp theo,” tôi sẽ thêm “Tính toán Khi Lỗi GoTo.”

Mã:

Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error GoTo KCalculation: i = 20/0 j = 20/2 KCalculation: k = 10/5 MsgBox "Giá trị của i là" & i & vbNewLine & "Giá trị của j là" & j & _ vbNewLine & "Giá trị của k là" & k & vbNewLine End Sub
Lưu ý: Ở đây, “Tính toán KC” là tên nhãn mà tôi đã đặt; bạn có thể đặt tên nhãn của riêng bạn mà không có bất kỳ khoảng trống nào.

Bây giờ, nếu tôi thực thi dòng mã này, nó sẽ không nhảy sang dòng tiếp theo. Thay vào đó, nó sẽ chuyển đến tên nhãn mà tôi đã nhập, tức là “KCalcualtion”. Ở đây, nó sẽ bỏ qua lỗi do “I” đưa ra và cũng không thực hiện phép tính “j”, nhưng ngay lập tức, nó sẽ chuyển sang “KCalcualtion”.

# 3 - Số lỗi in trong VBA

Ở cuối mã, chúng tôi cũng có thể in số lỗi trong một hộp thông báo riêng biệt. Dòng mã sau sẽ thực hiện công việc này.

Mã:

Err.Number

Bây giờ tôi sẽ chạy đoạn mã này hộp thông báo đầu tiên sẽ hiển thị kết quả tính toán.

Nhấp vào OK. Nó sẽ hiển thị thêm một hộp thông báo để hiển thị số lỗi.

Chúng tôi đi 11; kết quả là, chia theo số không.

Chúng tôi cũng có thể nhận được mô tả lỗi thay vì số. Chúng tôi chỉ cần thay đổi mã. Dưới đây là mã.

Mã:

Err.Description

Nó sẽ hiển thị mô tả như thế này.

Những điều cần ghi nhớ

  • Sau khi nhập “On Error Resume Next” ở cuối mã, đừng quên thêm câu lệnh “On Error GoTo 0.”
  • Tên nhãn phải giống nhau ở cả hai nơi.
  • Tên nhãn không cần phải được xác định trước.
  • Cuối cùng, hãy luôn xem lỗi xảy ra là gì thông qua hộp thông báo riêng biệt.

thú vị bài viết...