Bài 3 ((acro thực hiện các việc lặp lại 1. Tạo macro tô màu nền một ô Trước tiên ta cần chuẩn bị CSDL (cơ sở dữ liệu) như một danh sách (DS) học sinh của trường phổ thông hay một cơ quan nào đó gần ngàn người; có tối thiểu các trường dữ liệu như sau: Ma, Ho, Ten, NgaySinh, một số trường khác nữa. . . Nhiệm vụ nêu ra là đến cuối bài học ta sẽ tô màu khác nhau cho những người trong DS có các tháng sinh khác nhau; Bước đầu ta thực hiện việc tô màu cho 1 ô di chuyển xuống ô kế tiếp. Ta vô menu Tool > Macro > Record New Macros và đặt tên macro là ToMau Sau khi ấn nút OK trở về bảng tính ta chọn cột (trường) NgaySinh với ô trên cùng chứa dữ liệu của người đầu tiên trong DS. (Ví dụ đó là ô ‘G6’) Tiếp theo ta rà mũi chuột vô biểu tượng Fill Color trên thanh Toolbar, bấm hình mũi tên xuống để mở bảng màu nền. Ta nhấn vô ô màu trái nhất hàng dưới cùng; xong ta nhấn mũi tên xuống trên bàn phím. Lại rà mũi chuột lên bảng màu, ấn chọn vô màu kề nó phía phải màu vừa chọn lại ấn phím mũi tên xuống; Lặp lại quá trình này cho đến hết số màu trong hàng cuối của bảng màu; Kết thúc thu macro, ta sẽ có nội dung như sau (tác giả đã thu gọn một số cập lệnh lên trên một dòng bỏ bớt các câu lệnh tô màu từ ô G11 trở đi):
Bài /(/(acro thực việc lặp lại 1./ Tạo macro tô màu ô Trước tiên ta cần chuẩn bị CSDL (cơ sở liệu) danh sách (DS) học sinh của trường phổ thông hay quan gần ngàn người; có tối thiểu trường liệu sau: [Ma], [Ho], [Ten], [NgaySinh], & số trường khác Nhiệm vụ nêu đến cuối học ta tơ màu khác cho người DS có tháng sinh khác nhau; Bước đầu ta thực việc tô màu cho ô & di chuyển xuống ô Ta vô menu Tool -> Macro -> Record New Macros đặt tên macro ToMau Sau ấn nút OK trở bảng tính ta chọn cột (trường) [NgaySinh] với ô chứa liệu của người DS (Ví dụ ô ‘G6’) Tiếp theo ta rà mũi chuột vô biểu tượng Fill Color Toolbar, bấm hình mũi tên xuống để mở bảng màu Ta nhấn vô ô màu trái hàng cùng; xong ta nhấn mũi tên xuống bàn phím Lại rà mũi chuột lên bảng màu, ấn chọn vơ màu kề phía phải màu vừa chọn & lại ấn phím mũi tên xuống; Lặp lại trình hết số màu hàng cuối của bảng màu; Kết thúc thu macro, ta có nội dung sau (tác giả thu gọn số cập lệnh lên dòng & bỏ bớt câu lệnh tô màu từ ô G11 trở đi): Code: Sub ToMau() Range("G6").Select With Selection.Interior ColorIndex = 38: End With Range("G7").Select With Selection.Interior ColorIndex = 40: End With Range("G8").Select With Selection.Interior ColorIndex = 36: End With Range("G9").Select Pattern = xlSolid Pattern = xlSolid Pattern = xlSolid With Selection.Interior ColorIndex = 35: End With Range("G10").Select With Selection.Interior ColorIndex = 34: End With End Sub Pattern = xlSolid Pattern = xlSolid Trong macro, đến ô mới, VBA gán thuộc tính màu đặt tính pattenrn solid cho Macro tiện cách làm thủ cơng tí tẹo! Chú ý: Hai câu lệnh gán thuộc tính cho có khác so với macro FormatCurrency đầu tay Ở tên thuộc tính nằm riêng biệt, mà khơng nằm sau từ Selection & cách dấu chấm Sub FormatCurrency Cặp câu lệnh With Selection End With làm câu lệnh nằm chúng tác động lên phần chọn; coi câu có từ Selection đứng trước Rõ ràng cấu trúc khiến cho macro sáng sủa & dễ đọc Còn thế, làm cho macro chạy nhanh giảm bớt số khâu trở lại ban đầu: Thay vơ phòng lần, rót nước uống, châm thuốc hút, ta lại vơ fòng, rót nước uống, lại ra, xong vô lại & châm thuốc hút fòng í! 2./ Chỉ cho macro biết lựa chọn Vấn đề nêu macro phải biết tô màu ứng với giá trị chứa đó; Và mục tiêu của ta tô màu khác cho tháng sinh khác Để làm việc ta tơ chọn tất dòng, trừ hai dòng đầu & cuối mạnh tay xố (bằng phím Delete) Nhập dòng lệnh Code: Sub ToMau() Dim Thang, StrC As String: Dim Ij As Integer For Ij = To 999 StrC = "G" & CStr(Ij): Range(StrC).Select With Selection Thang = Value If Value = "" Then Exit For Thang = Month(Thang) Select Case Thang Case Is < 10 11 12 13 14 15 16 17 18 Interior.ColorIndex Case Is < Interior.ColorIndex Case Is < Interior.ColorIndex Case Is < Interior.ColorIndex Case Is < 11 Interior.ColorIndex Case Else Interior.ColorIndex 20 23 End Select End With Next Ij Exit Sub: = 38 = 40 = 36 = 35 = 34 = 37 End Sub Ta khai báo biến StrC để lưu giữ chuỗi địa thay đổi (tăng dần từ G6 trở đi) Chú ý: Biến Thang không khai báo kiểu liệu, lúc máy hiểu kiểu liệu Variant Một biến kiểu Variant chứa kiểu liệu mà ta biết từ đầu đến Tất nhiên nhớ giành cho phải nhiều hơn, & sau chứa nhiều thứ khác Ta ghi số vô đầu câu lệnh, máy ta nhận biết điều 3./ Vòng lặp For Next Để macro thực chu trình lặp lại, ta sử dụng cấu trúc tạo vòng lặp từ câu lệnh dòng đến dòng 23; Trong lần lặp, macro làm việc sau: Lấy giá trị để tính tháng sinh nhật; tơ màu ứng với tháng tìm Trong cấu trúc khối câu lệnh vòng lặp bình thường thực theo số lần xác định; mà cụ thể (999 – 6) lần Tuy nhiên câu lệnh số 6, người ta ấn định điều kiện ô không chứa giá trị vòng lặp /(/hư vậy, thay lặp lại tính tốn vơ nghĩa, máy lúc Và bạn tiết kiệm nhiều tài nguyên liệu Trong excel thấy bóng dáng vòng lặp hàm =FACT(Num); Cú pháp đầy đủ của vòng lặp For Next sau: Code: For Counter = First To last [Step step] (statements) [Exit for] (statements) Next [Counter] Trong đó, từ tơ đậm từ khóa của VBA, từ khóa mà VBA giành quyền sử dụng ta nên tránh xa tốt, không muốn bị báo lỗi xâm phạm chủ quyền Counter biến đếm, (trong VD ij) tùy phạm vi vòng lặp mà ta khai báo kiểu liệu của biến cho hợp lẽ First giá trị ban đầu của đếm; last cuối; Nhưng nên biết cuối chưa chắc lớn, có người, lúc cần đếm ngược, Code: Sub CaiSoDe() For iZ = 65535 to Step -5 If iZ Mod 999 = then Exit For Next iz Msgbox Str(iZ) End Sub Ở đây, lưu í trước tiên biến iZ phải khai báo sau: Dim iZ As Long Còn ví dụ, biến iZ khơng khai báo trước Và biến hiểu có kiểu liệu Variant (Điều không báo trước nghề y khuyên chống định!) Đây vòng lặp giảm dần, lần biến đếm iZ giảm đơn vị hay gặp số iZ chia hết cho 999 Mod toán tử, hiểu excel =If( MOD( iZ ; 999) = ; ‘Exit For’; ‘Tiếp’) Như ta thấy, bước khơng xác định lấy giá trị Một chống định đừng thay giá trị biến đếm (iZ, hay Ij ) vòng lặp; chuyện nên hỏi ‘bác sỹ’ chưa rành VBA) 4./ Cấu trúc Select .End Select Trong excel ta biết cấu trúc phân nhánh cách dùng hàm =IF(logical_test; value_if_true; value_if_false) Hàm hiểu nôm na đường lưu thông tới ngã ba; Rẽ phải hay trái tùy thuộc vé ta cầm tay; Hiển nhiên, excel cấu trúc If phép lồng (đến lần); Vậy thực ta hiểu: khơng phải trước ngã ba, mà chia ngã khác Lệnh Select Case phép rẽ nhiều nhánh lúc; (ấu trúc cú pháp của Select Case sau: Select Case TestExpression Code: [Case Expression (i)] [Statements (i)] [Case Else [ElseStatements] End Select TestExpression biểu thức số hay chuỗi bất kỳ Trong ví dụ biến Thang giữ vai trò Cần nói thêm lúc đầu Thang chứa giá trị liệu của hành (dòng 5); sau Thang chứa kết =MONTH(Thang) – Được gán giá trị tháng của liệu (dòng 7) & TestExpression của cấu trúc Select Case Trong macro ToMau nêu trên, tô màu khác cho cặp tháng; nhiên viết Code: Select Case Thang Case 1, Interior.ColorIndex = 38 Case 2, Interior.ColorIndex = 40 Case Else Interior.ColorIndex = 37 End Select Những người thành thục VBA khuyên ta nên nhập câu lệnh Case Else cho trường hợp, có chộp giá trị TestExpression không mong muốn xuất Bài tập thực hành: 1./ Hãy tạo macro tô màu cho Font chữ ô tương ứng Đỏ, Vàng, lục, lam, tím .; xem & đọc nội dung macro để thực tập dưới; 2./ Hãy đọc để biết macro sau cho kết bao nhiêu, ta nhập vô hộp thoại xuất hiện: Code: Sub TongBinhPhuong() Dim jZ as integer, wZ as Integer, TongBF As Long wZ =InputBox(“HAY NHAP SO CUOI”) TongBF = For jZ = To wZ TongBF = TongBF + jZ * jZ Next jZ Msgbox Str(TongBF) End Sub 3./ Giả sử ta có cột “D” điểm trung bình của học viên lớp; ta tạo macro để tô màu theo xếp loại học sinh; (VD: >=9: màu đỏ; >=7,5: Màu vàng ) Bài đọc thêm: Colors ... Is < 11 Interior.ColorIndex Case Else Interior.ColorIndex 20 23 End Select End With Next Ij Exit Sub: = 38 = 40 = 36 = 35 = 34 = 37 End Sub Ta khai báo biến StrC để lưu giữ chuỗi địa thay đổi... Selection.Interior ColorIndex = 35 : End With Range("G10").Select With Selection.Interior ColorIndex = 34 : End With End Sub Pattern = xlSolid Pattern = xlSolid Trong macro, đến ô mới, VBA gán thuộc tính màu... đầu câu lệnh, máy ta nhận biết điều 3. / Vòng lặp For Next Để macro thực chu trình lặp lại, ta sử dụng cấu trúc tạo vòng lặp từ câu lệnh dòng đến dòng 23; Trong lần lặp, macro làm việc sau: