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 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 hơn để 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ụ về Lỗi “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 cho nó.

  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 mà 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ã nhảy đế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

Bạn có thể tải xuống Mẫu VBA Khi Lỗi này tại đây - Mẫu VBA Khi Lỗi

# 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ép 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 cung cấp cho tôi bất kỳ thông báo lỗi nào mà nó sẽ thực thi dòng mã tiếp theo tức là j = 20/2.

# 2 - Trên nhãn GoTo bị 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 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 mã này vì tính toán “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 mình 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 mà nó sẽ nhảy đế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à nó cũng sẽ không thực hiện phép tính “j” mà 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.

Bấm vào OK nó sẽ hiện thêm 1 hộp thông báo số lỗi.

Kết quả là chúng ta đi 11 tức là Division by Zero.

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

Mã:

Err.Description

Nó sẽ hiển thị một 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 đượ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.

$config[zx-auto] not found$config[zx-overlay] not found