Hướng dẫn này sẽ trình bày cách đảm bảo rằng VBA Bỏ qua Lỗi khi chạy mã của bạn.
Đôi khi khi bạn xây dựng mã VBA, bạn thực sự muốn VBA bỏ qua một dòng mã khi xảy ra lỗi. Điều này thực sự có thể khá hữu ích nếu bạn muốn xóa một trang tính nếu nó tồn tại, nhưng bỏ qua dòng mã đó nếu trang tính không tồn tại.
(Xem Hướng dẫn xử lý lỗi của chúng tôi để biết thêm thông tin về Lỗi VBA)
Khi có lỗi Tiếp tục tiếp theo
Để bỏ qua một dòng mã trong một thủ tục, chúng tôi sử dụng Khi có lỗi Tiếp tục tiếp theo tuyên bố.
123456 | Sub TestErrorIgnore ()Khi có lỗi Tiếp tục tiếp theoActiveWorkbook.Sheets ("Sheet4"). ChọnActiveSheet.Delete'thêm mã ở đâyKết thúc Sub |
Trong ví dụ trên, một Khi có lỗi Tiếp tục tiếp theo tuyên bố đã được đặt ở đầu thủ tục. Sau đó, mã được xây dựng để chọn Sheet4 và sau đó xóa nó.
Tuy nhiên, do Khi có lỗi Tiếp tục tiếp theo , nếu mã không tìm thấy Sheet4, nó sẽ chỉ chuyển sang dòng tiếp theo và xóa bất kỳ trang nào đang hoạt động mà nó tìm thấy.
Điều này có thể khá nguy hiểm nếu chỉ có Trang 4 bạn muốn xóa chứ không phải chỉ Trang đang hoạt động. Để ngăn lỗi này, chúng ta có thể đặt một biến thành trang tính 4 và chỉ xóa trang tính đó NẾU nó tồn tại.
1234567 | Sub TestErrorIgnore ()Dim ws As WorksheetKhi có lỗi Tiếp tục tiếp theoĐặt ws = ActiveWorkbook.Sheets ("Sheet4")ws.Delete'thêm mã ở đâyKết thúc Sub |
Bây giờ khi mã được chạy, chỉ Sheet4 sẽ bị xóa NẾU NHƯ Sheet4 thực sự tồn tại. Nếu Trang tính 4 không tồn tại, VBA sẽ bỏ qua lỗi và tiếp tục.
Một ví dụ khác về điều này là nếu bạn muốn xóa tất cả các trang tính khỏi sổ làm việc của mình bằng cách sử dụng một vòng lặp. Vì sổ làm việc Excel phải có ít nhất một trang tính, mã sẽ xóa tất cả các trang tính trừ một trang tính.
123456 | Sub DeleteSheets ()Dim ws As WorksheetĐối với mỗi ws trong ActiveWorkbook.Sheetsws.DeleteTuần tiếp theoKết thúc Sub |
Đoạn mã trên sẽ dừng lại khi có lỗi.
Sự nhấp chuột Gỡ lỗi sẽ đưa chúng ta vào đoạn mã có dòng vi phạm được đánh dấu!
Tuy nhiên, việc thêm Khi có lỗi Tiếp tục tiếp theo dòng tới mã sẽ ngăn lỗi và quy trình sẽ luôn để lại một trang tính trong sổ làm việc.
12345678 | Sub DeleteSheets ()'thêm dòng lỗi ở đâyKhi có lỗi Tiếp tục tiếp theoDim ws As WorksheetĐối với mỗi ws Trong ActiveWorkbook.Sheetsws.DeleteTuần tiếp theoKết thúc Sub |
Lỗi GoTo 0
Thường nếu bạn sử dụng Khi có lỗi Tiếp tục tiếp theo để bỏ qua lỗi, bạn muốn mã bẫy lỗi sau này hoặc bạn muốn mã của mình ngừng chạy nếu lỗi xảy ra trong tương lai. Chúng tôi có thể thiết lập lại việc xử lý lỗi để mã sẽ một lần nữa phá vỡ lỗi bằng cách thêm dòng On Error GoTo 0.
12345678 | Sub TestErrorIgnore ()Dim ws As WorksheetKhi có lỗi Tiếp tục tiếp theoĐặt ws = ActiveWorkbook.Sheets ("Sheet4")ws.DeleteLỗi GoTo 0'thêm mã ở đâyKết thúc Sub |