VBA về lỗi Goto 0 | Làm thế nào để sử dụng khi lỗi GoTo 0 trong Excel VBA?

Excel VBA On Error Goto 0

VBA On Error GoTo 0 là một câu lệnh xử lý lỗi được sử dụng để vô hiệu hóa trình xử lý lỗi đã kích hoạt trong quy trình. Nó được gọi là “Trình vô hiệu hóa Trình xử lý Lỗi”.

Xử lý lỗi trong bất kỳ ngôn ngữ lập trình nào là một lớp tổng thể mà tất cả các lập trình viên cần phải hiểu. Ngôn ngữ lập trình VBA cũng vậy và chúng tôi cũng có các kỹ thuật xử lý lỗi trong ngôn ngữ lập trình này. “On Error Resume Next” sẽ bật trình xử lý lỗi và “On Error GoTo 0” sẽ tắt trình xử lý lỗi đã bật.

Cả “Khi Lỗi Tiếp tục Tiếp theo” và “Khi Lỗi GoTo 0” đều là các cặp cần được sử dụng song song để tăng hiệu quả của mã. Để xử lý lỗi, chúng ta cần bắt đầu với câu lệnh “On Error Resume Next” và để kết thúc trình xử lý lỗi này, chúng ta cần sử dụng câu lệnh “On Error GoTo 0”.

Bất kỳ mã dòng nào được viết giữa các câu lệnh này sẽ bỏ qua bất kỳ loại lỗi nào xảy ra trong quá trình tố tụng.

Làm thế nào để sử dụng câu lệnh On Error GoTo 0?

Bạn có thể tải xuống Mẫu VBA On Error Goto 0 Excel này tại đây - Mẫu VBA On Error Goto 0 Excel

Để biết ví dụ, hãy xem đoạn mã dưới đây.

Mã:

 Sub On_ErrorExample1 () Worksheets ("Sheet1"). Chọn Range ("A1"). Value = 100 Worksheets ("Sheet2"). Chọn Range ("A1"). Value = 100 End Sub 

Những gì đoạn mã trên làm là trước tiên nó sẽ chọn trang tính có tên “Sheet1” và trong ô A1, nó sẽ chèn giá trị 100.

Mã:

Worksheets ("Sheet1"). Chọn Phạm vi ("A1"). Giá trị = 100

Sau đó, nó sẽ chọn trang tính có tên “Sheet2” và chèn cùng một giá trị.

Mã:

Worksheets ("Sheet2"). Chọn Phạm vi ("A1"). Giá trị = 100

Bây giờ tôi có các trang tính dưới đây trong sổ làm việc của mình.

Không có sheet nào được gọi là “Sheet1” & “Sheet2”, khi chúng ta chạy mã sẽ gặp lỗi như bên dưới.

Vì không có trang tính nào được đặt tên là “Sheet1” nên nó đã gặp phải lỗi “Chỉ số phụ nằm ngoài phạm vi”. Để xử lý lỗi này, tôi sẽ thêm một câu lệnh xử lý lỗi “On Error Resume Next” ở đầu macro.

Mã:

 Sub On_ErrorExample1 () Khi có lỗi Tiếp tục các trang tính tiếp theo ("Sheet1"). Chọn Phạm vi ("A1"). Giá trị = 100 Trang tính ("Trang 2"). Chọn Phạm vi ("A1"). Giá trị = 100 Kết thúc Phụ 

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

Nó sẽ không đưa ra bất kỳ thông báo lỗi nào vì câu lệnh xử lý lỗi On Error Resume Next được kích hoạt.

Hãy tưởng tượng tình huống mà chúng ta cần bỏ qua lỗi trong trường hợp không có trang tính “Sheet1” nhưng chúng ta cần thông báo nếu không có trang tính nào được gọi là “Sheet2”.

Vì chúng tôi đã thêm On Error Resume Next ở trên cùng, nó đã bắt đầu xử lý lỗi nhưng đồng thời, chúng tôi cần chỉ định bao nhiêu dòng chúng tôi cần bỏ qua lỗi này.

Trong ví dụ này, chúng ta chỉ cần bỏ qua lỗi cho trang tính đầu tiên nhưng đối với trang tính thứ hai trở đi, chúng ta cần lỗi xảy ra nếu không có trang tính “Sheet2”. Vì vậy, sau khi mã trang tính đầu tiên thêm dòng vô hiệu hóa lỗi Trên Lỗi GoTo 0.

Mã:

 Sub On_ErrorExample1 () Khi Lỗi Tiếp tục các Trang tính Tiếp theo ("Trang 1"). Chọn Phạm vi ("A1"). Giá trị = 100 Khi Lỗi GoTo 0 Trang tính ("Trang 2"). Chọn Phạm vi ("A1"). Giá trị = 100 Kết thúc Phụ 

Bây giờ hãy chạy từng dòng mã để xem tác động bằng cách nhấn phím F8.

Bây giờ nếu bạn nhấn phím F8 một khi thực thi mã sẽ chuyển sang dòng tiếp theo và tác vụ dòng đang hoạt động sẽ được thực hiện. Bây giờ dòng hoạt động (dòng màu vàng) là trình xử lý lỗi “On Error Resume Next” và trình xử lý lỗi sẽ được bật.

Bây giờ bất kỳ lỗi nào xảy ra, nó sẽ bị bỏ qua cho đến khi thực thi trình xử lý lỗi vô hiệu hóa câu lệnh “ On Error GoTo 0 ” mã.

Trong lần thử trước, chúng tôi đã gặp lỗi nhưng hãy nhấn phím F8 thêm một lần nữa và thấy điều kỳ diệu.

Không đưa ra bất kỳ loại lỗi nào, nó đã tiếp tục thực thi mã mặc dù không có trang tính “Sheet2” để chọn. Bây giờ nhấn F8 một lần nữa.

Vì không có Sheet1 nên nó không thể chèn giá trị vào ô A1 là 500 nhưng những gì nó làm là nó sẽ chèn giá trị 500 vào ô A1 bất kỳ trang tính nào đang hoạt động. Trang tính hoạt động của tôi khi tôi đang thực thi mã là “Trang tính3”, vì vậy giá trị 100 được chèn vào ô A1.

Bây giờ dòng mã hoạt động là “ Lỗi GoTo 0 ”, bằng cách nhấn phím F8, tác vụ dòng này sẽ được thực hiện.

Vì “On Error GoTo 0” được thực thi, nó đã dừng quá trình xử lý lỗi và lại bắt đầu hiển thị lỗi nếu có. Nhấn phím F8 và xem lỗi.

Trong trường hợp trước đó không có lỗi Bật GoTo 0, nó cũng đã bỏ qua lỗi này, nhưng vì chúng tôi đã thêm trình vô hiệu hóa trình xử lý lỗi, nó đã bắt đầu hiển thị lại lỗi.

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

  • Cả Khi Lỗi Tiếp tục Tiếp theo và Khi Lỗi GoTo 0 cần được sử dụng làm “Trình xử lý Lỗi ” và “Trình vô hiệu hóa Trình xử lý Lỗi ”.
  • Bất kỳ dòng mã nào giữa hai câu lệnh này gặp lỗi, nó sẽ bị bỏ qua.
  • Nếu có câu lệnh On Error GoTo 0 thì sau khi thoát trình xử lý lỗi quy trình con sẽ bị vô hiệu hóa.