Tìm hiểu về thuộc tính và phương thức của đối tượng Err trong VBA Excel
Khám phá các thuộc tính và phương thức của đối tượng Err
1. Các Thuộc tính của đối tượng Err
Đối tượng Err có các thuộc tính sau:
Mặc dù trong phần lớn trường hợp chúng ta không cần sử dụng đối tượng Err, nhưng đôi khi nó có thể hữu ích trong việc xử lý các lỗi trong Excel.
Ví dụ, giả sử có dữ liệu như dưới đây và muốn tìm căn bậc 2 của mỗi số trong phạm vi đã chọn.
Bằng cách sử dụng đoạn mã sau. Tuy nhiên, vì ô A5 chứa một chuỗi văn bản chứ không phải số nên sẽ gây ra lỗi:
Sub FindSqrRoot()
Khai báo rng như một phạm vi.
Chọn phạm vi cho biến rng.
Duyệt qua mỗi ô trong phạm vi rng.
Gán căn bậc 2 của giá trị trong ô hiện tại vào ô bên cạnh.
Kết thúc vòng lặp duyệt qua các ô.
Kết thúc Phương thức
Tuy nhiên, thông báo này không cung cấp thông tin về lỗi và vị trí lỗi.
Trong trường hợp này, sử dụng đối tượng Err để nhận thông tin chi tiết về lỗi.
Ví dụ, sử dụng mã VBA dưới đây, nó sẽ dừng chương trình khi gặp lỗi và hiển thị thông báo lỗi với địa chỉ ô gây lỗi:
Hàm Tìm Căn Bậc 2()
Phạm Vi rng Như Một Khoảng
Đặt rng = Lựa Chọn
Đối Với Mỗi Ô Trong rng
Bắt Lỗi Đến Xử Lý Lỗi
cell.Offset(0, 1).Value = Căn Bậc Hai của Giá Trị Trong Ô
Tiếp Theo Ô
Xử Lý Lỗi:
Hiển Thị MessageBox với Thông Tin Lỗi
'Số Lỗi:' & Err.Number & vbCrLf & _
'Mô Tả Lỗi: ' & Err.Description & vbCrLf & _
Kết Thúc Sub
Mã Trên Cung Cấp Thông Tin Chi Tiết Hơn
Nếu Cần, Tinh Chỉnh Mã Để Đảm Bảo Chạy Đến Hết
Dưới Đây Là Đoạn Mã Để Tinh Chỉnh
Sub TìmCănBậc2()
Khai Báo Biến Lưu Các Ô Lỗi
Khai Báo Phạm Vi Rng
Cho Phép Bỏ Qua Lỗi
Thiết Lập Phạm Vi rng Bằng Vùng Chọn
Đối Với Mỗi Ô Trong Phạm Vi rng
Gán Giá Trị Căn Bậc Hai Của Ô Liền Kề cho Ô Hiện Tại
Nếu Số Lỗi <> 0
ErrorCells = ErrorCells & vbCrLf & Địa Chỉ Ô
Nếu Có Lỗi Thì Nhảy Đến -1
Kết Thúc Nếu
Tiếp Theo Ô
Hiển Thị Hộp Thoại 'Lỗi Trong Các Ô Sau' & ErrorCells
Thoát Sub
Kết Thúc Sub
Đoạn Mã Sẽ Chạy Hết và Trả Về Căn Bậc 2 Của Các Số Trong Các Ô Được Chọn, Sau Đó Hiển Thị Thông Báo Lỗi Liệt Kê Tất Cả Các Ô Chứa Lỗi
2. Các Phương Thức Đối Tượng Err
Ngoài những thuộc tính của Err được dùng để hiển thị thông tin chi tiết về lỗi, chúng ta còn có thể sử dụng 2 phương thức để xử lý lỗi.
Phương Thức Xóa
Clear: Xóa tất cả các cài đặt thuộc tính của đối tượng Err.
Raise: Tạo lỗi run-time.
2.1. Phương thức Xóa của Err
Ví dụ, giả sử có một bảng dữ liệu như sau và muốn lấy căn bậc hai của tất cả các số trong cột kế bên.
Khi sử dụng đoạn mã sau để lấy căn bậc hai của tất cả các số trong cột kế bên, nó sẽ trả về thông báo lỗi vì ô A5 và ô A9 chứa các chuỗi văn bản:
Sub TìmCănBậcHai()
ChuỗiLỗi as String
DãyGiáTrị as Range
TrườngHợpLỗi TiếpTục TiếpTục
Đặt DãyGiáTrị = LựaChọn
ĐốiVới Mỗi Ô Trong DãyGiáTrị
Ô.Offset(0, 1).GiáTrị = CănBậcHai(Ô.GiáTrị)
Nếu SốLỗi.Số <> 0 Thì
ChuỗiLỗi = ChuỗiLỗi & VbCrLf & Ô.ĐịaChỉ
XóaLỗi
KếtThúc Nếu
TiếpTheo Ô
MsgBox 'Lỗi trong các ô sau' & ErrorCells
KếtThúc Sub
Chú Ý: Trong ví dụ này, chúng ta áp dụng phương thức XóaLỗi trong lệnh Nếu - Thì.
Khi có lỗi xảy ra và bị bẫy trong điều kiện Nếu, chúng ta sử dụng XóaLỗi để đặt lại số lỗi về 0. Điều này đảm bảo rằng điều kiện Nếu chỉ bẫy các ô bị lỗi. Nếu không sử dụng XóaLỗi, một khi có lỗi, điều kiện Nếu luôn đúng và mã lỗi không được đặt lại.
Ngoài ra, chúng ta cũng có thể sử dụng lệnh On Error Goto -1 để đặt lại lỗi.
Chú Ý: Err.Clear và Lệnh On Error Goto -1 là hai khái niệm hoàn toàn khác nhau. Err.Clear chỉ xóa mô tả và mã lỗi mà không đặt lại lỗi hoàn toàn. Điều này có nghĩa là nếu có lỗi khác xảy ra trong cùng một đoạn mã, chúng ta không thể xử lý lỗi trước khi đặt lại lỗi. Trong trường hợp này, chúng ta cần sử dụng lệnh On Error Goto -1.
2.2. Phương thức Err Raise
Phương thức Err.Raise cho phép ta tạo ra một lỗi thời gian chạy. Dưới đây là cú pháp sử dụng phương thức Err.Raise:
Err.Raise [số], [nguồn], [mô tả], [tệp trợ giúp], [bối cảnh trợ giúp]
Trong đó tất cả các đối chơi xổ sốu là tùy chọn, và chúng ta có thể sử dụng chúng để tạo ra thông báo lỗi có ý nghĩa hơn.
Chúng ta có thể áp dụng phương thức này khi gặp lỗi (nghĩa là lỗi nào cũng có thể xảy ra), sau đó sử dụng phương thức để thông báo cho người dùng biết về lỗi (thay vì sử dụng thông báo mặc định không có ích lợi từ VBA).
Ví dụ, chúng ta tiếp tục áp dụng ví dụ ở trên nhưng muốn thiết lập sao cho tất cả các ô chỉ hiển thị giá trị số.
Sub RaiseError()
Kích hoạt vùng rng
Gán vùng rng bằng lựa chọn người dùng
Chuyển đến ErrHandler nếu gặp lỗi
Duyệt qua từng ô trong vùng rng
Nếu không phải là một số (IsNumeric(Cell.Value) = False) thì
Gây ra lỗi với mã lỗi vbObjectError + 513, tại ô địa chỉ Cell.Address với thông điệp 'Không phải là một số', trong tệp 'Test.html'
Kết thúc nếu
Tiếp tục với ô tiếp theo
Xử lý Lỗi:
Hiển thị Hộp thoại với Mô tả Lỗi và Tệp Trợ giúp
Kết thúc Phân đoạn
Mã trên sẽ thông báo lỗi với mô tả và tệp trợ giúp.
Cùng khám phá các thuộc tính và phương thức của đối tượng Err cùng Mytour. Nếu bạn có bất kỳ thắc mắc nào, hãy chia sẻ ý kiến của bạn trong phần bình luận để chúng ta cùng thảo luận!
Đừng bỏ lỡ những bài viết hữu ích của Mytour:
- Đọc bài viết VBA trong Excel Phần 1: Tổng quan và Bắt đầu
- Đọc bài viết VBA trong Excel Phần 2: Điều kiện và Vòng lặp
- Đọc bài viết VBA trong Excel Phần 3: Hàm và Thao tác Dữ liệu
Chúc bạn thành công trên hành trình của mình!
