32.8 C
Ho Chi Minh City
Thursday, June 4, 2026
AIPHOGPT.COM
Trang chủCông thức ExcelCâu lệnh VBA On Error – Xử lý lỗi trong Macro Excel

Câu lệnh VBA On Error – Xử lý lỗi trong Macro Excel

Join LeQuocThai.Com on Telegram Channel

Đánh giá lequocthai.com:

0 / 5 Voted: 0 Votes: 0

Your page rank:

Một macro được viết tốt là macro có các quy trình xử lý ngoại lệ hợp lý, có khả năng bắt và xử lý mọi lỗi có thể xảy ra. Xử lý lỗi quan trọng vì khi có bất kỳ ngoại lệ nào xảy ra, mã của bạn sẽ không bị dừng lại đột ngột. Ngay cả khi có lỗi nghiêm trọng, bạn cũng nên đảm bảo chương trình kết thúc một cách suôn sẻ.

Định nghĩa VBA On Error Statement:

Câu lệnh On Error chỉ thị cho trình biên dịch VBA biết phải làm gì khi một ngoại lệ thời gian chạy (runtime exception) được sinh ra.

Cú pháp của On Error Statement:

Về cơ bản, có ba loại câu lệnh On Error:

  • `On Error Goto 0`
  • `On Error Resume Next`
  • `On Error Goto

On Error Goto 0

Đây còn được gọi là xử lý ngoại lệ mặc định của VBA. Khi `On Error Goto 0` có hiệu lực, nó tương đương với việc không có bất kỳ trình xử lý lỗi nào trong mã. Ở chế độ này, chương trình sẽ hiển thị hộp thoại thông báo lỗi chuẩn với các nút Continue (Tiếp tục), End (Kết thúc), Debug (Gỡ lỗi), và Help (Trợ giúp).

Hộp thoại này cung cấp bốn lựa chọn:

  • Continue (Tiếp tục): Bỏ qua ngoại lệ và tiếp tục thực thi mã, chỉ khi có thể.
  • End (Kết thúc): Dừng chương trình.
  • Debug (Gỡ lỗi): Đưa quyền điều khiển trở lại câu lệnh gây ra ngoại lệ, giúp bạn gỡ lỗi.
  • Help (Trợ giúp): Mở trang trợ giúp Microsoft MSDN cho ngoại lệ đó.

On Error Resume Next

Đây là dạng thứ hai của câu lệnh On Error. Khi sử dụng, VBA sẽ bỏ qua lỗi và tiếp tục thực thi từ dòng lệnh kế tiếp.

`On Error Resume Next` không sửa chữa lỗi thời gian chạy mà chỉ cho phép chương trình tiếp tục chạy sau dòng gây lỗi. Tuy nhiên, trách nhiệm duy nhất của lập trình viên là đảm bảo rằng bất kỳ lỗi nào đã được xử lý không gây ra hiệu ứng phụ (như biến chưa khởi tạo hoặc đối tượng rỗng (null)) cho quá trình thực thi.

Điều này có thể được kiểm soát bằng đối tượng Err (Error object) trong VBA. Đối tượng Err xuất hiện mỗi khi có lỗi thời gian chạy và lưu trữ thông tin về một ngoại lệ tại một thời điểm.

Ví dụ:

Sub GetErr()
On Error Resume Next
N = 1 / 0   ' Dòng gây ra lỗi chia cho 0
For i = 1 To N
' Một số câu lệnh
Next i
End Sub

Trong ví dụ trên, dòng 3 gây ra ngoại lệ. Vì chúng ta dùng `On Error Resume Next`, dòng này sẽ bị bỏ qua và điều khiển sẽ chuyển tới câu lệnh tiếp theo – một vòng lặp phụ thuộc vào giá trị của N. Vì N chưa được khởi tạo, sẽ gây ra hiệu ứng phụ cho toàn bộ chương trình.

Cách xử lý tốt hơn:

Sub GetErr()
On Error Resume Next
N = 1 / 0   ' Dòng gây ra lỗi chia cho 0
If Err.Number <> 0 Then
N = 2   ' Giá trị tối thiểu cho N khi có lỗi
End If
For i = 1 To N
' Một số câu lệnh
Next i
End Sub

Ở đây chúng ta kiểm tra thuộc tính `Err.Number`; nếu khác 0 nghĩa là đã xảy ra lỗi, và chúng ta gán N một giá trị an toàn để tránh các lỗi phụ.

On Error Goto

Đây là dạng thứ ba của câu lệnh On Error. Khi gặp lỗi thời gian chạy, VBA sẽ chuyển quyền điều khiển tới dòng lệnh ngay sau label (nhãn) được chỉ định. Tất cả các câu lệnh nằm giữa dòng gây lỗi và label sẽ không được thực thi.

Phương pháp này thích hợp để thoát chương trình một cách suôn sẻ khi gặp lỗi nghiêm trọng.

Ví dụ:

Sub GetErr()
On Error GoTo Error_handler:
N = 1 / 0   ' Gây lỗi
MsgBox "Dòng này sẽ không được thực thi"
Exit Sub
Error_handler:
MsgBox "Xử lý ngoại lệ"
End Sub

Khi lỗi xảy ra ở dòng 3, quyền điều khiển sẽ được chuyển tới dòng 6. Lưu ý rằng chúng ta đặt `Exit Sub` ngay trước Error_handler: để đảm bảo khối mã xử lý lỗi không chạy nếu không có lỗi. Nếu bỏ qua `Exit Sub`, khối mã xử lý lỗi sẽ luôn được thực thi, kể cả khi không có ngoại lệ.

Vậy là chúng ta đã tìm hiểu toàn diện về câu lệnh On Error trong VBA cho Excel.

Khám phá:  Hàm COLUMNS trong Excel – Hướng dẫn sử dụng

Join LeQuocThai.Com on Telegram Channel

Lê Quốc Thái
Lê Quốc Tháihttps://lequocthai.com/
Yep! I am Le Quoc Thai codename name tnfsmith, one among of netizens beloved internet precious, favorite accumulate sharing all my knowledge and experience Excel, PC tips tricks, gadget news during over decades working in banking data analysis.

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây
Captcha verification failed!
CAPTCHA user score failed. Please contact us!

Join LeQuocThai.Com on Telegram Channel

Đọc nhiều nhất

BÀI VIẾT MỚI NHẤT

CÙNG CHỦ ĐỀ