Làm thế nào để bỏ qua lỗi bằng cách sử dụng VBA Khi Tiếp tục Báo cáo Tiếp theo Lỗi?

Excel VBA khi bị lỗi Tiếp tục lại tiếp theo

VBA On Error Resume Tiếp theo là một câu lệnh xử lý lỗi. Nếu lỗi xảy ra trong khi chạy mã thay vì hiển thị lỗi để tiếp tục dòng mã tiếp theo bằng cách bỏ qua thông báo lỗi, bạn có thể sử dụng câu lệnh này.

Những người viết mã thường xuyên trong VBA excel biết rằng họ có thể gặp lỗi ngay cả khi viết mã thành thạo, nhưng họ muốn bỏ qua lỗi đó và tiếp tục chạy với các dòng mã tiếp theo. Một ví dụ điển hình của việc nhận được thông báo lỗi là khi hàm trang tính VLOOKUP không tìm thấy giá trị tra cứu từ mảng bảng. Nó sẽ không trả về lỗi # N / A; đúng hơn, nó sẽ tạo ra lỗi. Là "Không thể lấy thuộc tính VLOOKUP của lớp hàm trang tính."

Nếu bạn không biết tại sao chúng tôi lại gặp lỗi này, thì rất khó để sửa lỗi. Trong VBA, chúng tôi có một tính năng được gọi là " Khi Lỗi Tiếp tục Tiếp theo ."

Khi Lỗi Tiếp tục Làm gì Tiếp theo trong VBA?

Có một số lĩnh vực nhất định với tư cách là một lập trình viên. Chúng tôi sẽ biết chắc chắn rằng điều này sẽ đưa ra một thông báo lỗi, nhưng chúng tôi cần phải bỏ qua lỗi này để tiếp tục xem mã, vì vậy làm thế nào để bỏ qua lỗi đó là nghi ngờ chung mà mọi người đều mắc phải.

Bằng cách sử dụng câu lệnh VBA On Error Resume Next, chúng ta có thể bỏ qua lỗi và tiếp tục dòng mã tiếp theo.

Ví dụ 1

Giả sử bạn có nhiều trang tính và bạn đang ẩn một số trang tính như một phần của dự án VBA. Ví dụ: dưới đây là các trang tính tôi có trong trang tính của mình.

Tôi đã viết mã để ẩn các trang “Bán hàng &“ Lợi nhuận ”và bên dưới là mã.

Mã:

Sub On_Error () Worksheets ("Bán hàng"). Visible = xlVeryHidden Worksheets ("Profit 2019"). Visible = xlVeryHidden Worksheets ("Profit"). Visible = xlVeryHidden End Sub

Bây giờ tôi sẽ bắt đầu chạy từng dòng mã bằng phím F8 .

Nếu tôi nhấn phím F8 một lần nữa, nó sẽ ẩn trang tính có tên “ Bán hàng ”.

Bây giờ hãy nhấn phím F8 một lần nữa và xem điều gì sẽ xảy ra.

Chúng tôi đã gặp lỗi "Chỉ số nằm ngoài phạm vi" vì dòng mã hiện tại cho biết bên dưới.

Bảng tính ("Lợi nhuận 2019"). Visible = xlVeryHidden

Nó đang cố gắng ẩn bảng tính có tên “ Lợi nhuận 2019, nhưng không có bảng tính nào có tên là “Lợi nhuận 2019”.

Trong những trường hợp này, nếu trang tính không tồn tại trong sổ làm việc, chúng tôi cần bỏ qua lỗi và tiếp tục chạy mã bằng cách bỏ qua lỗi “Chỉ số nằm ngoài phạm vi”.

Dòng tiếp theo trong mã cho biết

Trang tính ("Lợi nhuận"). Visible = xlVeryHidden

Trang tính này tồn tại trong sổ làm việc này, vì vậy nếu không bỏ qua lỗi, chúng tôi không thể di chuyển đến dòng mã này.

Để bỏ qua lỗi này, chúng ta cần thêm câu lệnh "On Error Resume Next".

Mã:

Sub On_Error () Khi có lỗi Tiếp tục các bảng tính tiếp theo ("Bán hàng"). Visible = xlVeryHidden Worksheets ("Lợi nhuận 2019"). Visible = xlVeryHidden Worksheets ("Lợi nhuận"). Visible = xlVeryHidden End Sub

Như bạn có thể thấy ở trên, tôi đã thêm câu lệnh ở đầu đoạn mã trước khi bất kỳ dòng nào bắt đầu. Bây giờ hãy chạy mã và xem điều gì sẽ xảy ra.

Bây giờ tôi đang ở trong dòng đã được đưa ra lỗi trước đó, hãy nhấn phím F8 và xem điều gì sẽ xảy ra.

Tôi đã chuyển sang dòng mã tiếp theo mà không hiển thị bất kỳ lỗi nào do câu lệnh mà chúng tôi đã thêm ở trên cùng, đó là câu lệnh VBA “On Error Resume Next”.

Ví dụ số 2

Bây giờ chúng ta sẽ xem cách sử dụng câu lệnh này với một ví dụ nữa. Nhìn vào cấu trúc dữ liệu dưới đây cho ví dụ này.

Chúng ta có hai bảng phía trên bảng đầu tiên có Tên trống và chi tiết tiền lương của họ trong bảng thứ hai và chúng ta chỉ có Tên trống, vì vậy bằng cách sử dụng hàm VLOOKUP, chúng ta cần tìm nạp chi tiết lương từ bảng bên trái.

Dưới đây là mã tôi đã viết để tìm nạp các chi tiết.

Mã:

Sub On_Error1 () Dim k As Long For k = 2 to 8 Cells (k, 6) .Value = WorksheetFunction.VLookup (Cells (k, 5), Range ("A: B"), 2, 0) Next k End Phụ

Bây giờ hãy chạy từng dòng mã và xem điều gì sẽ xảy ra.

Khi chạy mã ô đầu tiên, chúng tôi đã nhận được kết quả cho nhân viên đầu tiên. Lặp lại tương tự cho nhân viên thứ hai.

Lần này chúng tôi đã nhận được thông báo lỗi. Hãy xem tên nhân viên thứ hai trong bảng.

Tên nhân viên thứ hai là “Gayathri”, nhưng tên này không tồn tại trong bảng đầu tiên, do đó, hàm VBA Vlookup không trả về lỗi “# N / A” khi hàm VLOOKUP không tìm thấy giá trị tra cứu từ bàn; đúng hơn, nó đưa ra thông báo lỗi ở trên.

Mục đích của chúng tôi là nếu tên nhân viên không tìm thấy trong bảng, thì chúng tôi cần một ô trống cho nhân viên đó và bỏ qua lỗi và đưa ra kết quả cho các tên còn lại.

Chúng ta cần thêm câu lệnh “On Error Resume Next” bên trong vòng lặp.

Mã:

Sub On_Error1 () Dim k As Long For k = 2 to 8 On Error Tiếp tục các ô tiếp theo (k, 6) .Value = WorksheetFunction.VLookup (Cells (k, 5), Range ("A: B"), 2, 0 ) Tiếp theo k End Sub

Bây giờ hãy chạy mã và xem kết quả.

Hai tên nhân viên, “ Gayathri & Karanveer, ” không có trong danh sách, vì vậy những mã dòng đó chắc chắn đã gặp lỗi vì chúng tôi đã thêm câu lệnh xử lý lỗi “ Khi tiếp tục lỗi ” nó đã bỏ qua dòng mã đó và tiếp tục cho nhân viên tiếp theo.

Những điều cần nhớ ở đây

  • “On Error Resume Next” là câu lệnh xử lý lỗi khi chúng ta cần bỏ qua lỗi đã biết.
  • Nếu bạn chỉ muốn bỏ qua thông báo lỗi đối với một bộ mã cụ thể, hãy đóng câu lệnh tiếp theo về lỗi tiếp tục bằng cách thêm câu lệnh “ On Error GoTo 0 ”.

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