Thỉnh thoảng tôi không tin vào mắt mình khi thấy chương trình của một số người được xử lý rất nhanh. Thật không thể nào tin được.
Ta ví dụ đoạn code dưới đây sẽ đi tìm kiếm các cells trong cột A nếu có ký tự "tuhocvba.net":
Giả sử như ta tìm thấy A2 là ô cần tìm, tuy nhiên với code trên thì i vẫn phải chạy tới 1000 tức là dò xét tới tận ô A1000, điều này quả là việc vô ích, bởi vì ngay ở ô A2 đã tìm kiếm ra rồi.
Và vì vậy, chúng ta có một câu lệnh Exit mà tôi muốn mọi người nắm được.
Code ở trên tối ưu hơn chương trình ban đầu. Nếu nó tìm kiếm thấy, nó sẽ thoát khỏi vòng lặp For, không thực hiện tìm kiếm nữa.
Câu lệnh Exit này được dùng rất nhiều, không chỉ là Exit For, chúng ta còn thấy nó được sử dụng như Exit Do (Thoát vòng lặp Do Loop), Exit Function (thoát khỏi hàm), Exit Sub (thoát khỏi thủ tục).
Dù là For Next hay For Each thì chúng ta đều sử dụng chung là Exit For để thoát khỏi vòng lặp.
Giống như lệnh If khi sử dụng lồng nhau, các bạn thường hỏi vậy biết Else tác dụng với If nào, thì câu trả lời là nó tác dụng với lệnh If gần nhất.
Tương tự như thế, nếu lệnh For được lồng nhau, thì Exit For sẽ có tác dụng với lệnh For gần nó nhất.
Ta hãy xem qua hình vẽ minh họa dưới đây:
Diễn đàn tự học vba (tuhocvba.net) tham khảo và dịch từ:
Ta ví dụ đoạn code dưới đây sẽ đi tìm kiếm các cells trong cột A nếu có ký tự "tuhocvba.net":
Mã:
Sub Sample()
Dim i As Long, Target As Range
For i = 1 To 1000
If Cells(i, 1) = "tuhocvba.net" Then Set Target = Cells(i, 1)
Next i
'Sau do la doan chuong trinh xu ly voi Target
End Sub
Và vì vậy, chúng ta có một câu lệnh Exit mà tôi muốn mọi người nắm được.
Mã:
Sub Sample()
Dim i As Long, Target As Range
For i = 1 To 1000
If Cells(i, 1) = "tuhocvba.net" Then Set Target = Cells(i, 1)
Exit for 'Thoát khỏi vòng lặp for, không tìm kiếm nữa
Next i
'Sau do la doan chuong trinh xu ly voi Target
End Sub
Câu lệnh Exit này được dùng rất nhiều, không chỉ là Exit For, chúng ta còn thấy nó được sử dụng như Exit Do (Thoát vòng lặp Do Loop), Exit Function (thoát khỏi hàm), Exit Sub (thoát khỏi thủ tục).
Mã:
Sub Sample2()
Dim buf As Long
buf = ActiveCell.Value
Call myProc(buf)
End Sub
Sub myProc(buf As Long)
If buf < 1 Then
MsgBox "Hay chi dinh so > 1", vbExclamation
Exit Sub 'Thoát khỏi thủ tục myProc
End If
MsgBox buf * 100
End Sub
Giống như lệnh If khi sử dụng lồng nhau, các bạn thường hỏi vậy biết Else tác dụng với If nào, thì câu trả lời là nó tác dụng với lệnh If gần nhất.
Tương tự như thế, nếu lệnh For được lồng nhau, thì Exit For sẽ có tác dụng với lệnh For gần nó nhất.
Ta hãy xem qua hình vẽ minh họa dưới đây:
Bạn cần đăng nhập để thấy đính kèm
Diễn đàn tự học vba (tuhocvba.net) tham khảo và dịch từ:
Bạn cần đăng nhập để thấy link