Xử lý lỗi trong Excel VBA
Dưới đây chúng ta sẽ xem xét hai chương trình trong Excel VBA. Một chương trình chỉ đơn giản là bỏ qua lỗi. Chương trình khác tiếp tục thực hiện tại một dòng được chỉ định khi gặp lỗi.
Tình huống:
Cả hai chương trình đều tính căn bậc hai của số.
Square Root 1 Thêm các dòng mã sau vào nút lệnh ‘Square Root 1’.
-
Đầu tiên, chúng ta khai báo hai đối tượng Range. Chúng tôi gọi các đối tượng Range là rng và ô.
Dim rng As Range, cell As Range
-
Chúng ta khởi tạo đối tượng Range rng với phạm vi đã chọn.
Set rng = Selection
-
Chúng ta muốn tính căn bậc hai của mỗi ô trong một phạm vi được chọn ngẫu nhiên (phạm vi này có thể có kích thước bất kỳ). Trong Excel VBA, bạn có thể sử dụng vòng lặp Cho Mỗi Tiếp theo cho việc này. Thêm các dòng mã sau:
For Each cell In rng Next cell
Lưu ý: rng và ô được chọn ngẫu nhiên ở đây, bạn có thể sử dụng bất kỳ tên nào.
Hãy nhớ tham khảo những tên này trong phần còn lại của mã của bạn.
-
Thêm dòng mã sau vào vòng lặp.
On Error Resume Next
-
Tiếp theo, chúng ta tính căn bậc hai của một giá trị. Trong Excel VBA, chúng ta có thể sử dụng hàm Sqr cho việc này. Thêm dòng mã sau vào vòng lặp.
cell.Value = Sqr(cell.Value)
-
Thoát khỏi Visual Basic Editor và chạy thử chương trình.
Kết quả:
Kết luận: Excel VBA đã bỏ qua các ô chứa các giá trị không hợp lệ như số âm và văn bản. Nếu không sử dụng câu lệnh ‘On Error Resume Next’, bạn sẽ gặp hai lỗi. Hãy cẩn thận chỉ sử dụng câu lệnh ‘On Error Resume Next’ khi bạn chắc chắn rằng việc bỏ qua lỗi là OK.
Square Root 2 Thêm các dòng mã sau vào nút lệnh ‘Square Root 2’.
-
Chương trình tương tự như Square Root 1 nhưng thay thế ‘On Error Resume Next’ bằng:
On Error GoTo InvalidValue:
Lưu ý: InvalidValue được chọn ngẫu nhiên ở đây, bạn có thể sử dụng bất kỳ tên nào.
Hãy nhớ tham chiếu đến tên này trong phần còn lại của mã của bạn.
-
Bên ngoài vòng lặp For Each Next, trước tiên hãy thêm dòng mã sau:
Exit Sub
Nếu không có dòng này, phần còn lại của mã (mã lỗi) sẽ được thực thi, ngay cả khi không có lỗi! 3. Excel VBA tiếp tục thực thi ở dòng bắt đầu bằng ‘InvalidValue:’ khi gặp lỗi (đừng quên dấu hai chấm). Thêm dòng mã sau:
InvalidValue:
-
Hiện tại chúng tôi giữ cho mã lỗi của chúng tôi đơn giản. Chúng tôi hiển thị một MsgBox với một số văn bản và địa chỉ của ô xảy ra lỗi.
MsgBox "can't calculate square root at cell " & cell.Address
-
Thêm dòng sau để hướng dẫn Excel VBA tiếp tục thực thi sau khi thực thi mã lỗi.
Resume Next
-
Thoát Visual Basic Editor và chạy thử chương trình.
Kết quả: