VBA khi có lỗi Tiếp tục lại tiếp theo hoặc chuyển sang 0

Hướng dẫn này sẽ giải thích VBA On Error Resume Next và Goto Statement.

Ngay cả khi mã của bạn được xây dựng hoàn hảo, người dùng có thể không làm như bạn mong đợi. Vì lý do này, bạn cần chèn các trình xử lý Lỗi vào mã của mình bất cứ khi nào có lý do khiến lỗi có thể xảy ra.

Khi có lỗi Tiếp tục tiếp theo

Câu lệnh On Error Resume Next yêu cầu VBA bỏ qua bất kỳ dòng mã nào có lỗi và chuyển sang dòng tiếp theo. VBA sẽ bỏ qua dòng hoặc các dòng có lỗi và chuyển sang dòng mã tiếp theo.

Điều này hữu ích khi dòng mã có thể bị bỏ qua không quan trọng đối với việc chạy thành công macro, nhưng có thể khá nguy hiểm nếu được sử dụng không đúng cách vì nó có thể cho kết quả không chủ ý.

Ví dụ, trong quy trình dưới đây:

123456 Sub HideAllSheets ()Dim ws As WorksheetĐối với mỗi ws Trong ActiveWorkbook.Sheetsws.Vible = FalseTuần tiếp theoKết thúc Sub

Nếu chúng tôi chạy mã này, chúng tôi sẽ gặp lỗi vì chúng tôi không thể ẩn tất cả các trang tính trong một sổ làm việc - ít nhất một sổ làm việc vẫn phải hiển thị.

Tuy nhiên, nếu chúng tôi sửa đổi quy trình như được hiển thị bên dưới, mã sẽ tiếp tục qua lỗi và để lại trang cuối cùng trong sổ làm việc.

1234567 Sub HideAllSheets ()Khi có lỗi Tiếp tục tiếp theoDim ws As WorksheetĐối với mỗi ws Trong ActiveWorkbook.Sheetsws.Vible = FalseTuần tiếp theoKết thúc Sub

Lỗi GoTo 0

Nếu chúng tôi không có trình xử lý lỗi trong mã của mình, On Error Goto 0 là cài đặt mặc định của Excel. Về cơ bản, điều này có nghĩa là khi một lỗi xảy ra với Lỗi GoTo 0, VBA sẽ ngừng thực thi mã và hiển thị hộp thông báo lỗi tiêu chuẩn của nó, ví dụ:

Nếu chúng ta đã đặt một cái bẫy lỗi như Khi có lỗi Tiếp tục tiếp theo trong mã của chúng tôi, nhưng sau đó chúng tôi muốn đặt lại lỗi thành mặc định, chúng tôi có thể chèn On Error Goto 0 dòng vào mã của chúng tôi.

12345678910 Lỗi phụGoTo0 ()Khi có lỗi Tiếp tục tiếp theoDim ws As WorksheetĐối với mỗi ws Trong ActiveWorkbook.Sheetsws.Vible = FalseTuần tiếp theoLỗi GoTo 0'Chạy thêm mã ở đây chẳng hạn:ActiveSheet.Name = "Sheet1"Kết thúc Sub

Bây giờ nếu có bất kỳ lỗi nào trong mã của chúng tôi sau On Error Goto 0 hàng, thông báo lỗi mặc định cho Excel sẽ xảy ra. Trong ví dụ này, chúng ta đã có một trang tính có tên là Sheet1 trong ActiveWorkbook dưới dạng mã phía trên On Error Goto 0 ẩn trang tính, nhưng không xóa nó. Thông báo lỗi Excel mặc định cho biết rằng tên trang tính đã được sử dụng sau đó sẽ hiển thị.

Có lỗi chuyển sang Hàng

Chúng tôi cũng có thể buộc mã của mình chuyển sang một dòng mã khác bằng cách sử dụng On Error Goto Hàng yêu cầu VBA chuyển đến một dòng mã cụ thể nếu xảy ra lỗi.

123456789101112 Lỗi phụGoToLine ()Khi có lỗi Tiếp tục tiếp theoDim ws As WorksheetĐối với mỗi ws Trong ActiveWorkbook.Sheetsws.Vible = FalseTuần tiếp theoVề lỗi GoTo errhandlerActiveSheet.Name = "Sheet1"Thoát Subngười làm việc:MsgBox ("Đã có một trang có tên là sheet1!", VbCritical)Kết thúc Sub

Trong ví dụ trên, khi mã tìm thấy trang tính “Sheet1”, nó sẽ di chuyển đến dòng mã bên dưới nhãn trình xử lý lỗi - trong trường hợp này, nó gọi một hộp thông báo tùy chỉnh thông báo cho người dùng rằng trang tính đã thoát. Nhãn của trình xử lý lỗi phải có dấu hai chấm sau nó để cho VBA biết rằng đó là một nhãn.

1 người làm việc:

Sau đó, mã sẽ nhảy xuống dòng bên dưới nhãn và trả về hộp thông báo tùy chỉnh.

Điều này hữu ích khi bạn không muốn người dùng của mình có thể nhấp vào Gỡ lỗi để truy cập mã của bạn vì thông báo Excel tiêu chuẩn luôn cung cấp tùy chọn Gỡ lỗi mã.

Chúng tôi cũng cần một Thoát Sub trong thủ tục. Nếu đó là KHÔNG PHẢI một trang tính được gọi là Sheet1, sau đó dòng mã đó sẽ chạy và đổi tên trang tính đang hoạt động thành Sheet1. Sau đó, chúng tôi muốn mã kết thúc - chúng tôi không muốn nó chuyển sang trình xử lý lỗi và hiển thị hộp thông báo. Dòng Exit Sub sau đó thoát khỏi quy trình và dừng mã.

Bạn sẽ giúp sự phát triển của trang web, chia sẻ trang web với bạn bè

wave wave wave wave wave