Câu lệnh này được hiểu là "Nếu gặp lỗi thì bỏ qua và thực hiện câu lệnh kế tiếp". Nếu không có câu lệnh này thì khi chạy code, nếu gặp bất kỳ lỗi nào, code đều dừng lại và báo lỗi, không cho chạy tiếp. Nếu bạn muốn anh chàng VBA lờ đi để thực hiện câu lệnh kế tiếp thì bạn sử dụng câu lệnh này.Cho hỏi khi nào, trường hợp nào thì dùng câu này: On Error Resume Next
Sub Test()
Dim Rng As Range
On Error Resume Next
Set Rng = Sheet1.[A:A].Find(What:="ABC", Lookat:=xlWhole)
Do
Rng.EntireRow.Delete
Set Rng = Sheet1.[A:A].FindNext(Sheet1.[A1])
Loop Until Rng Is Nothing
End Sub
Ví dụ vầy cho đơn giản:Câu lệnh này được hiểu là "Nếu gặp lỗi thì bỏ qua và thực hiện câu lệnh kế tiếp". Nếu không có câu lệnh này thì khi chạy code, nếu gặp bất kỳ lỗi nào, code đều dừng lại và báo lỗi, không cho chạy tiếp. Nếu bạn muốn anh chàng VBA lờ đi để thực hiện câu lệnh kế tiếp thì bạn sử dụng câu lệnh này.
Ví dụ: Bạn cần xóa toàn bộ các hàng có nội dung tại cột A là "ABC". Khi đó, bạn sử dụng code sau:
Bây giờ bạn thử nghiệm chạy code trong các trường hợp có/không có dòng lệnh On Error Resume Next, có/không có dữ liệu "ABC" trên cột A, bạn sẽ thấy tác dụng của lệnh này (có thể nhấn F8 để chạy từng câu lệnh).PHP:Sub Test() Dim Rng As Range On Error Resume Next Set Rng = Sheet1.[A:A].Find(What:="ABC", Lookat:=xlWhole) Do Rng.EntireRow.Delete Set Rng = Sheet1.[A:A].FindNext(Sheet1.[A1]) Loop Until Rng Is Nothing End Sub
Sub Test()
ActiveSheet.Unprotect "ndu"
End Sub
Sub Test()
On Error Resume Next
ActiveSheet.Unprotect "ndu"
End Sub
Cảm ơn bạn, cho hỏi tiếpVí dụ: Bạn cần xóa toàn bộ các hàng có nội dung tại cột A là "ABC". Khi đó, bạn sử dụng code sau:
Bây giờ bạn thử nghiệm chạy code trong các trường hợp có/không có dòng lệnh On Error Resume Next, có/không có dữ liệu "ABC" trên cột A, bạn sẽ thấy tác dụng của lệnh này (có thể nhấn F8 để chạy từng câu lệnh).PHP:Sub Test() Dim Rng As Range On Error Resume Next Set Rng = Sheet1.[A:A].Find(What:="ABC", Lookat:=xlWhole) Do Rng.EntireRow.Delete Set Rng = Sheet1.[A:A].FindNext(Sheet1.[A1]) Loop Until Rng Is Nothing End Sub
Rng hay rang thì cũng chỉ là tên biến, do đó bạn thay thế (tất cả) Rng thành rang thì không vấn đề gì. Bạn có thể thay tên biến Rng thành một tên biến bất kỳ, miễn là đó là một tên biến hợp lệ.Cảm ơn bạn, cho hỏi tiếp
Dim Rang As Range
On Error Resume Next
Set Rang = Sheet1.[A:A].Find(What:="ABC", Lookat:=xlWhole)
Do
Rang.EntireRow.Delete
Set Rang = Sheet1.[A:A].FindNext(Sheet1.[A1])
Loop Until Rang Is Nothing
End Sub
Mấy cái chữ màu xanh nghiêng ở trên, code của bạn là Rng mình thử sửa là rang code chạy cũng bình thường vậy ý nghĩa là gì vậy bạn. Bạn giải thích dùm mình các chữ mình tô đậm màu nâu. Mình dốt quá hỏi xin đừng buồn.
nghiaphuc nên cắt từ bài này trở về sau vào 1 box khác (chẳng hạn box Trung tâm giải thích code, cụ thể là topic này: Hỏi đáp về VBA (các vấn đề căn bản nhất))Cảm ơn bạn, cho hỏi tiếp
Dim Rang As Range
On Error Resume Next
Set Rang = Sheet1.[A:A].Find(What:="ABC", Lookat:=xlWhole)
Do
Rang.EntireRow.Delete
Set Rang = Sheet1.[A:A].FindNext(Sheet1.[A1])
Loop Until Rang Is Nothing
End Sub
Mấy cái chữ màu xanh nghiêng ở trên, code của bạn là Rng mình thử sửa là rang code chạy cũng bình thường vậy ý nghĩa là gì vậy bạn. Bạn giải thích dùm mình các chữ mình tô đậm màu nâu. Mình dốt quá hỏi xin đừng buồn.
Box này em không có quyền quản lý bác ơi! Thôi thì đành nhờ bác Hai Lúa hay Smod nào đó đang online làm giùm việc này (và xóa cả 2 bài của bác với của em luôn cho gọn).nghiaphuc nên cắt từ bài này trở về sau vào 1 box khác (chẳng hạn box Trung tâm giải thích code, cụ thể là topic này: Hỏi đáp về VBA (các vấn đề căn bản nhất))