Xử lý lỗi:
Chúng ta sẽ xử lý lỗi bằng câu lệnh On Error.
Điểm chính trong bài viết này:
Chúng ta sẽ cùng tìm hiểu về vai trò của On Error và Resume trong đoạn code dưới đây.
Kết quả:
Chú ý:
Câu lệnh On Error:
Tiến hành xử lý khi có lỗi xảy ra, tại vị trí xảy ra lỗi bên trong chương trình thì câu lệnh này sẽ được kích hoạt thực thi.
Chúng ta cũng có thể chỉ định phớt lờ lỗi hoàn toàn.
Hoặc nếu gặp lỗi thì không làm việc nữa bằng cách sử dụng Exit Sub.
Cấu trúc 1:On Error GoTo line
Tham số [line] là tên nhãn do chúng ta chỉ định. Khi xảy ra lỗi, các dòng code tiếp theo sẽ bị phớt lờ, chương trình sẽ nhảy thẳng tới vị trí có nhãn để thực thi các lệnh trong nhãn này. Tên nhãn các bạn có thể đặt tùy ý, thông thường sẽ được viết hoa để cho dễ hình dung. Ví dụ: ERR1, ERR2,...
Cấu trúc 2:On Error Resume Next
Câu lệnh này tuyên bố rằng nếu có lỗi thì chương trình vẫn sẽ được thực thi các dòng code tiếp theo. Có nghĩa là nó phớt lờ toàn bộ lỗi.
Dù cho phớt lờ lỗi, thì lỗi nếu có vẫn được lưu thông tin trong biến Err Object. Bằng cách sử dụng biến đối tượng Err, người lập trình hoàn toàn có thể đoán biết được nguyên nhân xảy ra lỗi nếu muốn.
Cấu trúc 3:On Error GoTo 0
Từ giờ trở đi, nếu có lỗi xảy ra thì sẽ tiến hành xử lý lỗi bình thường, hủy bỏ chế độ phớt lờ lỗi nếu đã được thiết định trước đó.
Câu lệnh Resume:
Sau khi xử lý lỗi kết thúc, chương trình sẽ được tái khiển trai, thực thi tiếp các câu lệnh sau đó.
Cấu trúc 1:Resume [0]
Có thể giản lược không cần viết [0].
Sau khi lỗi xảy ra, chương trình sẽ quay về nơi bắt đầu nguyên nhân xảy ra lỗi. Các bạn thử chạy đoạn code trên, các bạn sẽ hiểu tại sao lại có thông báo 5.
Cấu trúc 2:Resume Next
Sau khi lỗi xảy ra, từ nơi xảy ra nguyên nhân lỗi, nó sẽ tiếp tục thực thi các dòng code tiếp theo.
Cấu trúc 2:Resume line
Chương trình sẽ nhảy tới nơi có nhãn [line] để thực thi các câu lệnh của nhãn này.
Tiếp theo chúng ta sẽ tìm hiểu về sự khác nhau giữa Resume và Resume Next.
Kết quả:
Kết quả:
(Còn nữa)
Nguồn tham khảo:
Chúng ta sẽ xử lý lỗi bằng câu lệnh On Error.
Điểm chính trong bài viết này:
- Câu lệnh On Error
- Câu lệnh Resume
- Err Object
Chúng ta sẽ cùng tìm hiểu về vai trò của On Error và Resume trong đoạn code dưới đây.
Mã:
Sub Error_Sample()
Dim i As Long 'Mặc định: Giá trị khởi tạo của i = 0
Dim dblAns As Double
On Error Resume Next 'Phớt lờ lỗi phát sinh nếu có, cứ tiến hành các công việc tiếp theo
dblAns = 100 / i 'Câu lệnh này sẽ tạo ra lỗi nếu i = 0
On Error GoTo 0 'Hủy bỏ trạng thái phớt lờ lỗi, từ giờ nếu có lỗi xảy ra thì người dùng sẽ được biết
MsgBox dblAns ' 1.#INF(Phép chia sẽ không thực hiện được khi chia cho 「0」, kết quả sẽ sai)
On Error GoTo ERROR 'Lỗi nếu phát sinh thì chạy tới nhãn ERROR
dblAns = 100 / i
On Error GoTo 0
MsgBox dblAns ' 5
Exit Sub
ERROR:
i = 20
Resume 'Quay trở lại nơi xảy ra lỗi
End Sub
Bạn cần đăng nhập để thấy đính kèm
Chú ý:
Câu lệnh On Error:
Tiến hành xử lý khi có lỗi xảy ra, tại vị trí xảy ra lỗi bên trong chương trình thì câu lệnh này sẽ được kích hoạt thực thi.
Chúng ta cũng có thể chỉ định phớt lờ lỗi hoàn toàn.
Hoặc nếu gặp lỗi thì không làm việc nữa bằng cách sử dụng Exit Sub.
Cấu trúc 1:On Error GoTo line
Tham số [line] là tên nhãn do chúng ta chỉ định. Khi xảy ra lỗi, các dòng code tiếp theo sẽ bị phớt lờ, chương trình sẽ nhảy thẳng tới vị trí có nhãn để thực thi các lệnh trong nhãn này. Tên nhãn các bạn có thể đặt tùy ý, thông thường sẽ được viết hoa để cho dễ hình dung. Ví dụ: ERR1, ERR2,...
Cấu trúc 2:On Error Resume Next
Câu lệnh này tuyên bố rằng nếu có lỗi thì chương trình vẫn sẽ được thực thi các dòng code tiếp theo. Có nghĩa là nó phớt lờ toàn bộ lỗi.
Dù cho phớt lờ lỗi, thì lỗi nếu có vẫn được lưu thông tin trong biến Err Object. Bằng cách sử dụng biến đối tượng Err, người lập trình hoàn toàn có thể đoán biết được nguyên nhân xảy ra lỗi nếu muốn.
Cấu trúc 3:On Error GoTo 0
Từ giờ trở đi, nếu có lỗi xảy ra thì sẽ tiến hành xử lý lỗi bình thường, hủy bỏ chế độ phớt lờ lỗi nếu đã được thiết định trước đó.
Câu lệnh Resume:
Sau khi xử lý lỗi kết thúc, chương trình sẽ được tái khiển trai, thực thi tiếp các câu lệnh sau đó.
Cấu trúc 1:Resume [0]
Có thể giản lược không cần viết [0].
Sau khi lỗi xảy ra, chương trình sẽ quay về nơi bắt đầu nguyên nhân xảy ra lỗi. Các bạn thử chạy đoạn code trên, các bạn sẽ hiểu tại sao lại có thông báo 5.
Bạn cần đăng nhập để thấy đính kèm
Cấu trúc 2:Resume Next
Sau khi lỗi xảy ra, từ nơi xảy ra nguyên nhân lỗi, nó sẽ tiếp tục thực thi các dòng code tiếp theo.
Cấu trúc 2:Resume line
Chương trình sẽ nhảy tới nơi có nhãn [line] để thực thi các câu lệnh của nhãn này.
Tiếp theo chúng ta sẽ tìm hiểu về sự khác nhau giữa Resume và Resume Next.
Code_2A:
Sub Error_Test_1()
Dim i As Long
Dim dblAns As Double
On Error GoTo ERROR
dblAns = 100 / i
MsgBox dblAns ' 5
Exit Sub
ERROR:
i = 20
Resume
End Sub
Bạn cần đăng nhập để thấy đính kèm
Code_2B:
Sub Error_Test_2()
Dim i As Long
Dim dblAns As Double
On Error GoTo ERROR
dblAns = 100 / i
MsgBox dblAns ' 1.#INF(Lỗi xảy ra khi i = 0)
Exit Sub
ERROR:
i = 20
Resume Next
End Sub
Bạn cần đăng nhập để thấy đính kèm
(Còn nữa)
Nguồn tham khảo:
Bạn cần đăng nhập để thấy link