Hướng dẫn cách viết vòng lặp Do Loop trong VBA - Đào Tạo Kế Toán

Hướng dẫn cách viết vòng lặp Do Loop trong VBA - Đào Tạo Kế Toán
Slider 1
Slider 2
Slider 3
Hướng dẫn cách viết vòng lặp Do Loop trong VBA

 Hướng dẫn cách viết vòng lặp Do Loop trong VBA

Các cấu trúc lập trình trong VBA liên quan tới vòng lặp khá đa dạng. Ngoài cấu trúc For… Next, For Each… Next, chúng ta còn có cấu trúc Do Loop. Vậy cách viết vòng lặp Do Loop trong VBA như thế nào? Chúng ta hãy cùng Tin học văn phòng VAFT  tìm hiểu qua bài viết này nhé.

Khi tìm hiểu về cấu trúc vòng lặp For… Next và For Each… Next trong VBA, chúng ta thấy 2 dạng vòng lặp này hầu như đều biết trước số lần thực hiện vòng lặp, hay nói cách khác là số lần thực hiện vòng lặp sẽ được xác định cụ thể.

Nhưng trong thực tế không phải lúc nào số lần vòng lặp cũng biết trước. Ví dụ như việc yêu cầu nhập đúng UserName và Password trong 1 form đăng nhập thì mới vào được chương trình.
Có 2 cách viết cú pháp như sau:
Cách 1: Điều kiện ở đầu vòng lặp
Do { While | Until } Điều kiện
[ Câu lệnh thực thi ]
Continue Do ]
[ Câu lệnh thực thi ]
Exit Do ]
[ Câu lệnh thực thi ]
Loop
Cách 2: Điều kiện ở cuối vòng lặp
Do
[ Câu lệnh thực thi ]
Continue Do ]
[ Câu lệnh thực thi ]
Exit Do ]
[ Câu lệnh thực thi ]
Loop { While | Until } Điều kiện
Trong đó:
  • Từ khóa Do (bắt buộc) : Để bắt đầu cho vòng lặp Do
  • Từ khóa While (bắt buộc nếu không dùng từ Until): Lặp lại vòng lặp cho đến khi điều kiện sai (chỉ dừng lại khi điều kiện chuyển từ đúng sang sai)
  • Từ khóa Until (bắt buộc nếu không dùng từ While): Lặp lại vòng lặp cho đến khi điều kiện thoả mãn.
  • Điều kiện: là 1 cấu trúc so sánh mà kết quả của phép so sánh đó luôn trả về giá trị Đúng hoặc Sai
  • Câu lệnh thực thi : là các câu lệnh thực thi 1 hành động hoặc trả về kết quả theo ý muốn trong từng vị trí tương ứng của cấu trúc.
  • Continue Do (không bắt buộc) : tiếp tục thực hiện vòng lặp Do mà không thoát dù thỏa mãn điều kiện trước đó, thường đặt sau câu lệnh thực thi.
  • Exit Do (không bắt buộc) : thoát vòng lặp tại vị trí được đặt từ khóa này, thường đặt sau câu lệnh thực thi.
  • Loop (bắt buộc) : từ khóa để kết thúc cấu trúc vòng lặp Do
* Lưu ý:
  • Không sử dụng đồng thời While và Until trong cùng 1 cấu trúc. Nếu đã dùng While thì không dùng Until và ngược lại.
  • Cấu trúc điều kiện ở đầu vòng lặp có thể khiến vòng lặp không chạy dù chỉ 1 lần.
  • Cấu trúc điều kiện ở cuối vòng lặp thì vòng lặp luôn chạy ít nhất 1 lần.
  • Có thể lồng ghép các cấu trúc vòng lặp khác, cấu trúc IF vào vị trí câu lệnh thực thi để lập trình những trường hợp vòng lặp phức tạp.
  • Do vòng lặp Do… Loop là dạng vòng lặp không xác định cụ thể số lần lặp, do đó dễ xảy ra vòng lặp vô tận (không có điểm dừng). Do đó cần xác định 1 số điểm dừng cho vòng lặp (bằng cấu trúc IF, vị trí đặt lệnh Exit Do). Trong trường hợp xảy ra vòng lặp vô tận, các bạn có thể bấm liên tục phím ESC trên bàn phím để ngừng vòng lặp này.
Trong phần này, Học Excel Online sẽ mô tả cụ thể yêu cầu “nhập đúng UserName và Password trong 1 form đăng nhập thì mới vào được chương trình”.
Ví dụ như sau:
Chúng ta có 2 bảng gồm:
Bảng thứ 1: Bảng đăng nhập.
Tại đây người dùng sẽ phải nhập UserName vào ô B3, Password vào ô B6, và bấm vào Shape Xác nhận để xác nhận thông tin đăng nhập.
Bảng thứ 2: Danh sách tài khoản
Tại đây gồm các thông tin UserName và Password hợp lệ mà người dùng được phép sử dụng.
Nếu đăng nhập thiếu thông tin sẽ báo lỗi yêu cầu phải nhập đủ thông tin trong cả 2 ô UserName và Password
Nếu đăng nhập đúng theo cả UserName và Password tương ứng thì xác nhận là “Đăng nhập đúng”.
Còn chỉ cần sai 1 trong 2 yếu tố thì sẽ là “Đăng nhập sai”
Câu lệnh lập trình trong VBA cho việc “Xác nhận” như sau:
Sub Login_confirm()
Dim username As String
Dim password As String
username = Sheets("Sheet1").Range("B3").Value 'Gán biến UserName tại vị trí người dùng nhập UserName là ô B3
password = Sheets("Sheet1").Range("B6").Value 'Gán biến Password tại vị trí người dùng nhập Password là ô B6
Dim i As Integer
i = 3 'Biến i đại diện cho dòng bắt đầu của danh sách tài khoản
If username = "" Or password = "" Then 'Xét trường hợp thiếu dữ kiện (không nhập 1 trong 2 ô)
MsgBox "Vui long nhap du thong tin UserName va Password"
Else
Do While Sheets("Sheet1").Range("E" & i).Value <> "" And i < 5 'Vòng lặp Do với điều kiện tại cột E phải có dữ liệu và chỉ xét tới dòng 4
If username = Sheets("Sheet1").Range("E" & i).Value And _
password = Sheets("Sheet1").Range("F" & i).Value Then 'Nếu thông tin đăng nhập UserName và Password giống với vị trí dòng i đang xét ở Danh sách tài khoản
MsgBox "Dang nhap chinh xac"
Exit Sub 'Kết thúc ngay Sub mà không xét các lệnh tiếp theo
Else
i = i + 1 'Trường hợp không chính xác thì xét tiếp dòng tiếp theo nhưng phải thỏa mãn điều kiện ban đầu của vòng lặp Do
End If 'Kết thúc IF
Loop 'Kết thúc vòng lặp Do
MsgBox "Thong tin dang nhap khong chinh xac" 'Các trường hợp không thỏa mãn thì đều báo thông tin đăng nhập không chính xác
End If
End Sub
Trong trường hợp này, chúng ta không thể biết rõ có bao nhiêu lần đăng nhập, mà chỉ biết khi nào đăng nhập chính xác. Khi đăng nhập chính xác sẽ kết thúc vòng lặp.
Do đó sử dụng vòng lặp Do While… Loop để xác định khi nào đăng nhập đúng.
Còn những trường hợp khác đều là đăng nhập sai hoặc thiếu thông tin sẽ xử lý bằng cấu trúc If… Then… End If
Các bạn có ví dụ nào về trường hợp sử dụng vòng lặp Do… Loop không? Hãy chia sẻ với Học Excel Online nhé.