CAU TRUC LOGIC DIEU KIEN VA VONG LAP
Chương 1: Chương 1: GIGI THIEU VE VBA
sé hiện hộp thông báo nhắc nhở người dùng click vào một phép toán. Nếu bạn thêm những nút tùy chọn mới vào nhóm tùy chọn cho các phép toán khác, ban dé dang thay đổi chương trình cho phù hợp với yêu cầu của mình. Bạn chỉ cần chèn thêm một mệnh để EIselƒ vào một điều kiện đặc biệt nào đó cho mỗi nút mới.
Như ban thay, cau lénh If .. Then rat mềm đẻo. Bạn có thể sử dụng lệnh này để giải quyết nhiều tùy chọn. Cú pháp của lệnh thay đổi không đáng kể tùy thuộc vào bạn đang thực hiện điều gì.
Select Case
Câu lénh Select Case khong chỉ có một điều kiện. Nó đánh giá một biểu thức và thực thi một khối các câu lệnh theo diéu kiện nào đó. Khi bạn cần kiểm tra nhiều hơn 2 điều kiện thì câu lệnh Select Case có thể đơn giản và dễ sử dung hon cau lénh Jf ... Then.
Cú pháp của câu lệnh Select Case là:
Select Case test expression Case expression list-1
‘Statements
Case expression list-2
‘Statements Case Else
‘Statements End Select
Chú ý rằng Select Case đánh giá một biểu thức kiểm tra ban đầu. Điều này có thể đơn giản như truyền vào một tham số nhưng cũng có khi gây rắc rối phức tạp. Các giá trị Expression hist 1 và Expression list_2 la cdc phạm vị (hoặc các giá trị đặc biệt) cho biểu thức kiểm tra. Có một vài tùy chọn để xác định các danh sách biểu thức gồm các hằng số, các mục giới hạn trong một loạt các mục, 45
hoặc các biểu thức điều kiện có trị là True hay Fơise. Một danh sách biểu thức là đúng khi nó tương hợp với biểu thức kiểm tra, các lệnh trong khối tương ứng sẽ được thực hiện. Mẫu cú pháp ở trên chỉ trình bày hai danh sách, nhưng bạn có thể thêm nhiều hơn bằng cỏch chốn cỏc cõu lệnh điều kiện Cứse vào đú. Mệnh để Case Else 1a thy chon nén rất thuận lợi cho lập trình thực tế. Mục chọn này lấy bất kỳ các giá trị biểu thức kiểm tra nào không thoả điều kiện của các mệnh đề Case phía trước. Bạn có thể lồng các câu lệnh Select Case với nhau; mỗi câu lệnh phải bắt đâu bang Select Case và kết thúc bằng End Select.
Hình 1-16 trình bày về câu lénh Select Case được dùng trong một thủ tục hàm. Thủ tục hàm này thực hiện một trong 4 phép toán cho hai số được truyền tới. Có một đối số kiểu chuỗi chỉ định phép toán cần thực hiện và cửa sổ Immediate thể hiện kết quả của phép toán. Khi nhìn vào cửa sổ Immediate, bạn thấy danh sách biểu thức cần kiểm tra không phân biệt chữ hoa hay chữ thường.
Trường hợp phép toán truyền vào mệnh để Case Eise không nằm trong 4 phép toán yêu cầu, hàm này sẽ in câu thông báo trong cửa số Immediate cho biết rằng phép toán không hợp lệ.
ĐT LET)
[iceneeay xÌ mat i
Mablie Puncticn CeneurerOldbiaeeel, aoitubers, operation Aa Suringi S| Select Case Gperation
“hidicion®
9 Me iManias 6 Mita?
b a at
Hinh 1-16. cave Tae - 421Msưerv Môi thủ lục .—. đbiHunsEsrL u›iH me r3
* T6mgwkerD * dbiMeeeci / doihmber2
` ` ane El ae
hàm và xuất a . End Setece `. . sẽ.
kết quả khi sử Ki Panes F
ˆ a aye ô+ .
dụng câu. lệnh =
Select Case. `sempt xi0 L1, *comg at grũ Teomputecd (1,2, %
„+
fcompacerO 12,2, “muleipiacetson*t Jeanpucero t3,2.“divizion™)
Foamputer® 41.2, tmddiecn) as weration is mot veld]
id „ af
46
Chương 1: GIỚI THIỆU VỀ VIA For... Next
Cau lénh For .. Next thường được dùng khi muốn thực hiện lặp đi lặp lại một khối lệnh với số lần lặp được xác dịnh tr ước. Bạn có thể thoát ra khỏi vòng lặp giữa chừng bằng câu lệnh ví For.
Bạn cũng có thể sử dụng lệnh For .. Next khi khong biết chắc số lần lặp bằng cách chỉ ra số lần lặp tối đa cho vòng lặp đó. Cú pháp câu lệnh như sau:
For counter = start To stop Step step
‘Statements If condition Then
Exit For End if
‘Statements Next counter
Vòng lặp For bat dau tir dong lénh For counter tdi dong Next counter. Câu lệnh For..Next khởi tạo bién counter, gdn gia tri start và thực hiện các câu lệnh nằm giữa For .. Next, sau đó quay lên đầu vòng lặp For, bién counter tự động tang thêm bởi tùy chọn se?, (nếu không chỉ định s¿zp biến counter tự động tăng thêm 1).
Các câu lệnh trong vòng lặp For thuc hiện lặp đi lặp lại cho đến khi giá trị của biến coun(er lớn hơn giá trị s(op (hoặc nhỏ hơn nếu bước nhảy sfep là số âm). Quyền điều khiển câu lệnh chuyển tới câu lệnh ở sau câu lệnh Next Counter. Câu lệnh tùy chon Exit For dùng để ngắt giữa chừng vòng lap For trước khi biến counfer
vượt quá giá tri stop.
Bạn có thể đặt các câu lệnh For .. Next lông nhau. Vòng lặp sẽ chuyển điều khiển tới câu lệnh phía sau vòng lặp khi biến counter vượt quá gid tri stop. VBA co thé phat sinh ra 16i run-time 47
(thời gian thực hiện) nếu có câu lệnh kết thúc Wex£ nhưng không có câu lệnh tương ứng For.
Thu tuc CountFor (xem ở dưới) áp dụng vòng lặp For .. Next để tăng cường các kỹ thuật làm việc với các mảng và các khai báo Sfatic (mảng aryMyArray có 5 phần tử. Nhắc lại rằng chỉ số cuả các phần tử trong mảng bắt đầu là 0, trừ khi bạn chỉ ra chỉ số khác trong chương trình). Kế tiếp chương trình khai báo một biến kiểu Tnterger dùng làm biến đếm. Câu lệnh For .. Next an dinh cdc gia trị liên tục từ 1 đến 5 dựa vào biến đếm IntIndex.
Có hai loại lệnh thực thi xuyên qua từng vòng lặp thứ nhất, giá trị của phần tử trong aryMyArray cộng thêm giá trị hiện hành của Intẽndex vào giỏ trị hiện hành của nú. Từ lỳc chương trỡnh khai bdo aryMyArray với một lệnh Static, cdc phần tử mảng ghi nhớ các giá trị của chúng xuyên suốt thủ tục. Sau lần thực hiện thứ nhất, các phần tử mảng có giá trị là giá trị kế tiếp của In¿lndex. Sau lần thực hiện thứ hai, các phần tử aryMyArray có giá trị tăng gấp hai lần giá trị sau của IntIndex, v.v.. Cau lệnh thứ hai in giá trị hiện hành của Intẽndex và phần tử liờn kết của mảng. Xin nhớ rằng bạn có thể khởi tạo lại giá trị của các phần tử mảng từ 0 bằng cách chọn Run-Reset trên menu Run của VBE.
Sub CountFor()
Static aryMyArray(4) As Integer Dim intindex As Integer
For intindex = 1 To 5
aryMyArray(ntindex - 1) = _
aryMyArray(intindex - 1) + intindex
Debug. Print intIndex, aryMyArray(intindex - 1) Next intlndex
Debug.Print vbLf End Sub
Hình 1-17 thể hiện kết quả xuất vào cửa sổ Immediate sau 3 lần chạy liên tiếp. Cột đầu tiên thể hiện giá trị liên tục của biến tnilndex, cột thứ hai thể hiện giá trị tương ứng của các phần tử
Chương 1: GIỚI THIEU VE VBA
mang. Ở lần chạy đầu tiên giá trị của phan tử trong mảng bằng với giá trị của biến intIndex. Trong lần chạy thứ hai và thứ ba, các giá trị của phan tử mảng tăng gấp hai và gấp ba giá trị của IntIndex. Kết quả tích lũy này thể hiện tác động của khai báo biến Static. Cac gid tri eda IntIndex và arrayMyArray hoàn toàn giống nhau néu ban thay tit khoa Static trong khai bao arrayMyArray bang tir khéa Dim.
ees [x]
Abwne woe oom Ww an te
lu số
Hình 1-17. Cửa sổ Immediate trình bày kết quả của thủ tục CountFor với ba lần liên tiếp.
For Each... Next Vd With... End With
Câu lénh For Each .. Next va With .. End With cé thé lam
việc với nhau rất tốt để hợp thức hóa dữ liệu của form và các tác vụ liệt kê đơn giản. Câu lénh For Each ... Next lap di lap lai qua bat ky tập hợp (như các điều kiện trong form) hoặc máng nào. Nó không yêu cầu ứng dụng phải biết trước số phần tử trong tập hợp hay trong mang. Cau lénh With .. End With cé thé bé sung cho lénh For 49
Euch . Next để làm đơn giản cách thức mã hóa các quyển điều khiển đa dạng trong một khối lệnh.
Câu lénh For Each .. Next don giản, rõ ràng va ít phức tạp hon lenh For .. Next. N6 tuong tu nhu lénh For .. Next trong đó
vòng lắp khởi sự ở dòng bắt đầu với for và kết thúc ở dòng bắt đầu với /exf. Tuy nhiên, mục đích của các dòng For va Next trong cả hai phương án vòng lặp là hoàn toàn khae nhau, Câu lệnh For Bạch . Next it phuc tap hon cau lệnh For .. Next boi vi ban khéng phai theo déi 3 déi sé khác nhau (counter, start vA stop) hoac khéng ban tam vé gid tri ctia step lA Am hay duong. Lénh For Each..Next luén khởi sự từ đầu và các vòng lặp ở trước tới khi nó đạt đến cuối của tập hợp hoặc phần tử trong mảng. Cú pháp của lệnh như sau:
For Each element In group
‘ Statements If condition Then
Exit For Endlf
‘Statements Next elment
Thuật ngữ goup trong dòng đầu tiên của câu lệnh For Each..Next dé cap tdi mét tap hop hay một tên của mang. Element ở dòng đầu và dòng cuối chỉ ra những đối tượng riêng rẽ trong tập hợp hay những phần tử trong mảng.
Câu lénh For Each .. Next thực hiện lặp lại những câu lệnh trong thân của nó cho mỗi phần tử được chỉ ra trong tập hợp hay trong mảng. Bạn thường muốn có lénh Exit For hoặc câu lệnh thực thi điều kiện khác ở đâu đó trong than vong lap For...Loop. Điều này cho phép chương trình của bạn đáp ứng một cách linh hoạt để có kết quả trong môi trường của nó. Kiểm tra điều kiện đồng nhất với kết quả đặc biệt này và Exử For hoặc các câu lệnh thực thi điều