Trong bài đăng này, chúng ta sẽ xem xét các control VBA riêng lẻ và cách sử dụng chúng. Học Excel Online sẽ đề cập đến các control VBA thường được sử dụng nhất. Đó là Checkbox, ComboBox, CommandButton, Label, ListBox và TextBox
Xem nhanh
Trong bài đăng đầu tiên về UserForm, chúng ta đã xem xét cách sử dụng của UserForm. Còn đối với mỗi control VBA trong bài này, tôi sẽ trình bày các cách sử dụng phổ biến nhất của chúng và cung cấp nhiều ví dụ mà bạn có thể sử dụng trong các dự án của riêng mình. Các control VBA đó là:
Chúng ta thêm các control VBA vào UserForms để cho phép người dùng thực hiện lựa chọn, nhập văn bản hoặc nhấp vào nút. Để thêm điều khiển vào UserForm, chúng tôi thực hiện như sau
Bảng sau đây hiển thị danh sách các điều khiển phổ biến
Control | Mô tả |
Checkbox | Bật / tắt mục |
ComboBox | Cho phép lựa chọn từ danh sách các mục |
CommandButton | Nhấp để thực hiện hành động |
Label | Hiển thị văn bản |
ListBox | Cho phép lựa chọn từ danh sách các mục |
TextBox | Cho phép nhập văn bản |
Hình bên dưới cho thấy ba Windows quan trọng khi thêm control VBA 0vào UserForm. Đó là:
Nếu bạn nhấp vào bất kỳ control VBA nào hoặc chính UserForm, bạn sẽ thấy các thuộc tính của mục đã chọn được hiển thị trong cửa sổ Properties . Bạn có thể thay đổi tên, chú thích, v.v. trong Window này.
Để thay đổi tên của UserForm, hãy làm như sau:
Bạn có thể xem mã của UserForm theo các cách sau:
Bảng sau đây cho thấy các chức năng được sử dụng phổ biến nhất có sẵn cho tất cả các điều khiển.
Chức năng | Hoạt động | Ví dụ |
Enabled | Enable/Disable control | combobox.Enabled = True
textbox.Enabled = False |
SetFocus | Đặt tiêu điểm cho control (không thể sử dụng với Label) | combobox.SetFocus |
Visible | Show/Hide control | combobox.Visible = True
textbox.Visible = False |
Private Sub checkboxAddNotes_Click() ' Enable texbox when checkbox set to true If checkboxAddNotes.Value = True Then textboxNotes.Enabled = True textboxNotes.SetFocus Else textboxNotes.Enabled = False End If End Sub
Bảng Cheat Cheat CheckBox
Chức năng | Hoạt động | Ví dụ |
Caption | Nhận / Đặt văn bản | checkbox.Caption = “Apple” |
Value | Nhận trạng thái đã kiểm tra | If checkbox.Value = True Then |
Value | Đặt trạng thái đã kiểm tra | checkbox.Value = False |
CheckBox là một control VBA đơn giản cho phép người dùng bật hoặc tắt nội dung nào đó. Bạn sẽ thường thấy chúng được sử dụng trên các trang web nơi bạn được yêu cầu chấp nhận các điều khoản và điều kiện.
Chúng ta có thể bật hoặc tắt CheckBox bằng cách đặt nó thành true hoặc false.
' Set the check on CheckBoxTerms.Value = True ' Set the check off CheckBoxTerms.Value = False
Nếu chúng ta muốn tạo một hành động khi người dùng nhấp vào checkbox thì chúng ta tạo một checkbox event. Đây chỉ đơn giản là một phụ chạy khi hộp kiểm được nhấp vào.
Để tạo sự kiện này, chỉ cần nhấp vào hộp kiểm trong chế độ thiết kế và bạn sẽ nhận được những điều sau:
Private Sub CheckBoxTerms_Click() End Sub
Đoạn mã sau đây cho thấy một ví dụ về cách chúng ta sử dụng:
Private Sub CheckBoxTerms_Click() If checkboxTerms.Value = True Then buttonOk.Enabled = True Else buttonOk.Enabled = False End If End Sub
Label
Label Cheat Sheet
Chức năng | Hoạt động | Ví dụ |
Text | Nhận \ Đặt văn bản | textbox1.Text = “Apple” |
Label là control VBA đơn giản nhất. Nói chung, chúng ta không đề cập đến nó trong mã. Nó được sử dụng để gắn nhãn các control hoặc hiển thị một thông báo ngắn.
Đặt Label Text
Bạn có thể đặt văn bản của Label trong mã bằng cách sử dụng thuộc tính Caption:
LabelAddress.Caption = "Customer Address"
TextBox
Bảng Cheat TextBox
Chức năng | Hoạt động | Ví dụ |
Text | Đặt văn bản | textbox1.Text = “Apple” |
Text | Đặt văn bản | sFruit = textbox1.Text |
Value | Đặt văn bản | textbox1.Value = “Apple” |
Value | Đặt văn bản | sFruit = textbox1.Value |
TextBox được sử dụng để cho phép người dùng nhập văn bản. Chúng ta có thể đọc hoặc viết từ một hộp văn bản như sau:
TextBoxNotes.Value = "It was the best of times." sNotes = TextBoxNotes.Value
textbox có các thuộc tính Text và Value. Đây là những điều tương tự.
From MSDN: Đối với TextBox, bất kỳ giá trị nào bạn gán cho thuộc tính Text cũng được gán cho thuộc tính Value.
Vấn đề với textbox là người dùng có thể nhập bất cứ thứ gì. Nếu người dùng đang nhập văn bản cơ bản thì điều này là tốt. Nếu văn bản được sử dụng để tính toán hoặc tìm kiếm thứ gì đó thì chúng ta cần xác nhận nó.
Ví dụ: nếu người dùng định chọn một năm từ 2010 đến 2019, chúng ta nên sử dụng ComboBox / Listbox chỉ chứa các năm hợp lệ. Sau đó, chúng ta không cần xác thực định dạng và phạm vi mục nhập của người dùng.
Đoạn mã sau ngăn người dùng nhập bất kỳ thứ gì khác ngoài số vào hộp văn bản:
Private Sub textboxComments_KeyPress( _ ByVal KeyAscii As MSForms.ReturnInteger) Select Case KeyAscii Case Is < vbKey0, Is > vbKey9 KeyAscii = 0 Beep End Select End Sub
Nếu bạn là người dùng để chọn ngày, bạn có thể sử dụng MonthView control. Nó là một trong những control VBA bổ sung đi kèm với Visual Basic. Nó hoạt động khá tốt và trông giống như công cụ chọn ngày tiêu chuẩn mà bạn thấy trong hầu hết các ứng dụng.
Để thêm MonthView control:
Để có được lựa chọn người dùng từ điều khiển MonthView, bạn có thể sử dụng DateClick event như đoạn mã sau hiển thị.
Private Sub MonthView1_DateClick( _ ByVal DateClicked As Date) ' Store date in textbox TextBox1.Value = MonthView1.Value End Sub
Để biết thêm thông tin chọn ngày trong excel sau:
ỨNG DỤNG CHỌN NGÀY DÙNG TRONG EXCEL VÀ VBA
ComboBox
Bảng Cheat ComboBox
Chức năng | Hoạt động | Ví dụ |
AddItem | Thêm một mục | listbox.AddItem “Spain” |
Clear | Xóa tất cả mục | combo.Clear |
List | Thêm một loạt mục | combo.List = Range(“A1”).Value |
ListCount | Nhận số lượng mục | cnt = combo.ListCount |
ListIndex | Nhận / đặt mục đã chọn | Idx = combo.ListIndex
combo.ListIndex = 0 |
ListRows | Nhận / đặt số lượng mục được hiển thị | NoItems = combo.ListRows
combo.ListRows = 12 |
RemoveItem | Xóa một mục | combo.RemoveItem 1 |
Value | Nhận giá trị các mục đã chọn | Dim sCountry As String
sCountry = combo.Value |
Control VBA ComboBox được sử dụng để cho phép người dùng chọn một mục từ danh sách. Nó rất giống với control VBA listbox. Sự khác biệt chính là hộp danh sách cho phép nhiều lựa chọn.
Trong hầu hết các trường hợp, chúng ta muốn thực hiện bốn điều với ComboBox \ ListBox:
Chúng ta có thể điền vào combobox một mục tại một thời điểm bằng cách sử dụng thuộc tính AddItem.
Bạn thường sử dụng AddItem trong một vòng lặp nơi bạn đang kiểm tra từng mục trước khi thêm nó.
Nếu bạn muốn điền vào ComboBox từ toàn bộ vùng dữ liệu, bạn có thể thực hiện điều đó trong một dòng mã.
Thông thường, khi bạn điền vào một ComboBox, bạn muốn xóa nội dung hiện có trước tiên.
Nếu vùng dữ liệu của chúng ta có nhiều mục nhập thì chúng ta muốn tránh thêm cùng một mục nhiều lần. Chúng ta có thể làm điều này bằng cách sử dụng Từ điển.
Cách dễ nhất để chỉ ra cách thức hoạt động này bằng một ví dụ. Hãy tưởng tượng chúng ta có một danh sách các quốc gia và thủ đô của họ trong các ô A1: B196.
Chúng ta muốn người dùng chọn bất kỳ quốc gia nào. Khi họ thực hiện UserForm của chúng ta sẽ hiển thị thủ đô của quốc gia đó. Hình dưới đây cho thấy và ví dụ về điều này.
Điều đầu tiên chúng ta muốn làm là điền vào ComboBox các quốc gia khi tải biểu mẫu. Chúng ta thực hiện việc này bằng cách sử dụng UserForm_Initialize event mà chúng ât đã xem xét trong bài đăng đầu tiên trên VBA UserForms.
Chúng ta có thể sử dụng mã sau để điền vào ComboBox từ một dải ô và đặt mục đã chọn là mục đầu tiên. (Lưu ý rằng chúng ta không cần xóa ComboBox ở đây vì Initialize event chỉ được sử dụng một lần – khi UserForm được tạo).
Khi người dùng chọn một quốc gia, chúng ta muốn hiển thị thủ đô trong textbox. Chúng ta sử dụng Change Event của control VBA ComboBox. Để tạo cái này, chúng ta chỉ cần nhấp đúp vào ComboBox và nó sẽ được tạo tự động.
Khi người dùng nhấp vào Ok, chúng ta ghi các giá trị đã chọn vào bảng Results.
Một nhiệm vụ rất phổ biến cần thực hiện là cập nhật ComboBox thứ hai dựa trên lựa chọn của cái đầu tiên.
Hãy tưởng tượng chúng ta có hai ComboBox – một chứa tên của một quốc gia và một có danh sách ba thành phố từ quốc gia đó.
Khi người dùng chọn một quốc gia, chúng ta cập nhật ComboBox thành phố với các thành phố từ quốc gia đó.
Dữ liệu của chúng ta được lưu trữ như sau:
Bất cứ khi nào giá trị Country ComboBox được đặt thành một quốc gia, chúng tôi cập nhật City ComboBox để chứa ba thành phố từ quốc gia đó. Điều này xảy ra ở hai nơ:
Mã cho những điều này như sau:
Trong cả hai trường hợp, chúng ta gọi FillCityCombo Sub để điền vào ComboBox thành phố. Nó nhận một tham số là vị trí của lựa chọn quốc gia hiện tại.
Chúng ta sử dụng giá trị vị trí để đếm từ hàng trên cùng của vùng dữ liệu trang tính.
ListBox là một control VBA được sử dụng gần giống như ComboBox. Mã trong phần ComboBox ở trên cũng sẽ hoạt động cho control VBA ListBox.
Chức năng | Hoạt động | Ví dụ |
AddItem | Thêm mục | listbox.AddItem “Spain” |
Clear | Xóa tất cả các mục | listbox.Clear |
ColumnCount | Đặt số lượng cột hiển thị | ComboBox1.ColumnCount = 2 |
ColumnHeads | Hiển thị hàng cột | ComboBox1.ColumnHeads = True |
List | Vùng dữ liệu đến Listbox
ListBox đến vùng dữ liệu |
Listbox.List = Range(“A1:A4”).Value
Range(“A1:A4”).Value = Listbox.List |
ListCount | Nhận số lượng mục | cnt = listbox.ListCount |
ListIndex | Nhận / đặt mục đã chọn | Idx = listbox.ListIndex
combo.ListIndex = 0 |
RemoveItem | Xóa một mục | listbox.Remove 1 |
RowSource | Thêm vùng dữ liệu củagiá trị từ một trang tính | ComboBox1.RowSource = Sheet1.Range(“A2:B3”).Address |
Value | Nhận giá trị của mục đã chọn | Dim sCountry As String
sCountry = listbox.Value |
Chúng ta có thể sử dụng control VBA ListBox giống như cách chúng ta sử dụng control VBA ComboBox. Sự khác biệt là cách chúng được hiển thị.
Sự khác biệt chính khác giữa chúng là ListBox cho phép nhiều lựa chọn còn ComboBox thì không.
Chúng ta có thể lấy tất cả các mục đã chọn trong ListBox bằng cách đọc qua tất cả các mục và kiểm tra xem từng mục đã được chọn chưa. Trong đoạn mã dưới đây, chúng ta thêm tất cả các mục đã chọn vào một Bộ sưu tập.
Bài viết về control VBA đã kết thúc series 2 bài đăng về cách sử sụng useforms, Học Excel Online mong muốn rằng các bạn đã có thể nắm được các kiến thức về vận hành và ứng dụng cho công việc. Xin chào và hẹn gặp lại trong các bài viết bổ ích sắp tới về VBA Excel nhé!