VBA Excel Cấp Tốc Bài 8 - Cách Tạo Checkbox Hàng Loạt Trong Excel
Trong Excel thường hay sử dụng Checkbox để tạo hộp kiểm tra cho đẹp mắt, gọn gàng và nhìn chuyên nghiệp cũng như người dùng dễ dàng tích chọn tùy theo từng mục đích khác nhau. Với bài viết này ta sẽ tập trung vào checkbox với mục đích giúp bạn tạo ra một loạt các checkbox cũng như quản lý chúng trong Excel một cách hiệu quả nhất.
Xem bài học trước
>> VBA Excel Cấp Tốc Bài 1 - Lọc Dữ Liệu Nhiều Điều Kiện Với Advanced Filter
>> VBA Excel Cấp Tốc Bài 2 - In Bảng Cửu Chương
>> VBA Excel Cấp Tốc Bài 3 - In Ấn Nhanh Hàng Loạt
>> VBA Excel Cấp Tốc Bài 4 - Xóa Tự Động Hàng Loạt Sheets Không Active
>> VBA Excel Cấp Tốc Bài 5 - Copy File Từ Một Thư Mục Sang Thư Mục Khác
>> VBA Excel Cấp Tốc Bài 6 - Hướng Dẫn Sử Dụng Record Macro Trong Excel Từ Cơ Bản Đến Nâng Cao
>> VBA Excel Cấp Tốc Bài 7 - Cách Gộp Nhiều File Excel Vào Một File Duy Nhất
Video hướng dẫn thực hiện
Tạo Checkbox có tích và không có tích.
Tạo 2 checkbox 1 cái có dấu tích và một cái không dấu tích: vào Insert -> Symbol -> phần Font chọn là Webdings -> tìm hình checkbox có dấu tích và không dấu tích hoặc gõ mã 254 ở ô Character code để chọn checkbox có dấu tích và mã 168 để chọn checkbox không có dấu tích.
Bôi đen vùng tạo checkbox từ ô B6 đến B21 -> vào Home chọn Webdings ở ô kề ô cỡ chữ.
Mở Visual Basic lên để lập trình cho cái Checkbox vừa tạo: Developer -> Visual Basic -> kích đúp vào Sheet1 trong cửa sổ Visual Basic -> Tại ô có chữ General tích chọn lại Worksheet và ô kế bênh là SelectionChange.
Gọi một câu lệnh If Not Intersect(Target, Range("B6:B21")) Is notthing Then và xuống hàng End If. Trong đó Renge("B6:B21") là bắt đầu của cột checkbox cột B từ B6 đến B21.
Trong cú pháp If vừa rồi bạn dùng câu lệnh If Target.Value = "" trong đấu đoạn kép này bạn tích vào checkbox có tích chọn rồi copy cái mã đó sau đó dán vào đây và gõ Then ở cuối. If Target.Value = "þ" Then
Tiếp theo bạn gõ Target.Value = "" trong ngoặc kép này bạn copy mã của checkbox không có tích chọn song dán vào đây. Target.Value = "¨"
Đến điều kiện Else bạn gõ Else -> Enter -> copy phần lệnh If của Checkbox có tích chọn dán vào đây -> Enter -> End If. Target.Value = "þ"
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("B6:B21")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
If Target.Value = "þ" Then
Target.Value = "¨"
Else
Target.Value = "þ"
End If
End If
End Sub
Nhưng khi bạn chọn một lúc nhiều ô thì nó sẽ báo lỗi để khắc phục điều này ta dùng thêm câu lệnh. Trước If Target.Value ta dùng câu lệnh If Target.Count > 1 Then Exit Sub thì khi ta tích nhiều ô vẫn ok.
Tô Đậm những ô có dấu tích.
Đầu tiên copy ký tự có checkbox lúc đầu tạo ra -> bôi đen vùng dữ liệu rồi vào Home -> Conditional Formatting -> New Rule.
Cửa sổ hiện ra chọn dòng cuối cùng trong Select a rule type -> trong ô Format values gõ = tích vào ô đầu tiên trong checkbox sau đó bấm f4 hai lên để có dấu $ đứng trước(vd:=$B6) rồi =" dán ô lúc nãy bạn copy vào đây" và chọn Format.
Chọn Bold -> Fill chọn màu sau đó ok. Kết quả.
Tạo Checkbox để chọn All.
Vào Developer -> Insert -> chọn hình có checkbox -> tích ra 1 ô bất kỳ sau đó xóa tên nó đi giữ lại ô checkbox -> kích chuột phải vào ô checkbox kéo nó vào ô chọn all.
Tích vào checkbox copy(ctrl+c) tên checkbox ở góc trên bên trái màng hình -> mở Visual Basic lên tích vào Sheet1 -> Insert -> Module.
Bắt đầu viết code mở đầu là Sub tên chương trình (chon_all) enter để nó tự tạo ra End Sub -> mình gõ MsgBox Sheet1.CheckBoxes("tên checkbox mình tạo lúc nãy"). vd:MsgBox Sheet1.CheckBoxes("Check Box 1").
Cho chạy chương trình khi mình chưa tính vào checkbox thì nó sẽ hiện -4146 tích vào checkbox thì hiện 1.
Nháy chuột phải vào checkbox chọn Format Control -> cửa sổ hiện ra chọn Mixed -> ok
Vào Module sữa Hàm MsgBox thành If Sheet1.CheckBoxes("Check Box 1").Value = 1 Then
Viết thêm lệnh Sheet1.Range("B6:B21").Value = "þ" B6-B21 là vùng checkbox, "þ" là copy mã của checkbox có dấu tích.
Tiếp theo là Else và copy Sheet1.Range("B6:B21").Value = "þ" sửa "þ" thành "¨" bằng cách ra copy checkbox không có dấu tích.
Đoạn Code:
Sub Chon_all()
If Sheet1.CheckBoxes("Check Box 1").Value = 1 Then
Sheet1.Range("B6:B21").Value = "þ"
Else
Sheet1.Range("B6:B21").Value = "¨"
End If
End Sub
Khi viết xong bạn tích chuột phải vào Checkbox chọn Assign Macro -> tích vào Chon_all -> ok.
kết quả
Bài tiếp theo >> VBA Excel Cấp Tốc Bài 9 - Tự Tạo Hàm Excel Riêng
CHO ĐIỂM BÀI VIẾT NÀY