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 chính 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” 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 bằng 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?

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

Đoạn mã trên làm gì 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ã:

Trang tính ("Trang 1"). 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 Range ("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ó trang tính nào được gọi là “Trang tính1” & “Trang tính2”. Khi chúng ta chạy đoạn 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 “Khi Tiếp tục Lỗi Tiếp theo” ở đầ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 tính2"). 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 bật.

Hãy tưởng tượng tình huống 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 ta đã 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 ta cần chỉ định bao nhiêu dòng để 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 tôi cần lỗi xảy ra nếu không có trang tính “Sheet2”. Vì vậy, sau 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 khi quá trình thực thi mã nhảy 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 hiện hoạt (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 nó 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 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ó 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 thi.

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.

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