VBA USERFORM CONTROLS – HƯỚNG DẪN CHO MỌI NGƯỜI

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

Giới thiệu

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à: 

  • Label: là các nhãn, bạn có thể ghi ký tự lên đó để hiển thị ra ngoài.
  • TextBox: Là ô nhập dữ liệu. Thường được dùng để nhập đường link của một file hay folder. Hoặc để người dùng nhập thông tin tên, tuổi,… vào đó.
  • CommandButton: Là nút bấm để người dùng click vào.
  • CheckBox: control VBA cho phép người dùng tích chọn, có hai trạng thái On/Off hoặc True/False.
  • Option button (radio button) : Có từ 2 hạng mục trở lên và bạn muốn người dùng hãy tích chọn 1 lựa chọn trong số đó, khi đó sẽ dùng control VBA Radio Button.
  • ListBox: Hiển thị một danh sách, có thể thiết định nhiều cột và hiển thị nhiều dòng dữ liệu. Người dùng có thể chọn một hay nhiều dòng dữ liệu trong đó với control VBA này
  • ComboBox: Hiển thị một danh sách để người dùng lựa chọn. Người dùng có thể nhập giá trị tùy ý vào để tìm kiếm trong danh sách của nó.

UserForm Controls VBA

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

  1. Đi tới hộp thoại Toolbox – nếu không hiển thị, hãy chọn View->Toolbox.  
  2. Nhấp vào biểu tượng control bạn muốn thêm – biểu tượng sẽ xuất hiện được chọn (được nhấn vào) cho đến khi bạn nhấp vào biểu tượng khác.
  3. Đặt con trỏ qua UserForm.  
  4. Giữ nút chuột trái và kéo cho đến khi điều khiển có kích thước bạn muốn.
  5. Để chọn hoặc di chuyển control VBA , hãy nhấp vào biểu tượng Select Objects (biểu tượng ở bên trái) trên hộp công cụ và thao tác này sẽ đưa bạn vào chế độ chọn.

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

 

Thuộc tính của control VBA

Hình bên dưới cho thấy ba Windows quan trọng khi thêm control VBA 0vào UserForm. Đó là:

1-VBA USERFORM CONTROLS
1-VBA USERFORM CONTROLS
  1. Cửa sổ Properties.  
  2. Hộp thoại Toolbox.  
  3. Cửa sổ thiết kế UserForm.

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:

  1. Nhấp vào UserForm trong cửa sổ Project hoặc nhấp vào chính UserForm.  
  2. Bấm vào trường (Name) của cửa sổ Properties.  
  3. Nhập tên mới vào trường này.

Thêm mã

Bạn có thể xem mã của UserForm theo các cách sau:

  1. Nhấp đúp vào UserForm.  
  2. Nhấp chuột phải vào chính UserForm và chọn View Code.  
  3. Nhấp chuột phải vào UserForm trong cửa sổ Project và chọn View Code.

Các chức năng điều khiển chung

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	

CheckBox

Bảng Cheat Cheat CheckBox

2-VBA USERFORM CONTROLS
2-VBA USERFORM CONTROLS
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.

Bật hoặc tắt CheckBox

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

Ví dụ Checkbox Event

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

 

Cài đặt TextBox Text

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.

Tạo TextBox dạng số

Đ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

Sử dụng Date Control

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:

  1. Đi tới trình chỉnh sửa Visual Basic và đảm bảo Toolbox hiển thị (View ->Toolbox nếu nó không hiển thị).  
  2. Chọn Tools và sau đó chọn Additional Controls từ menu.  
  3. Kiểm tra Microsoft MonthView Control, Phiên bản 6.0.  
  4. Điều khiển MonthView bây giờ sẽ xuất hiện trên Toolbox.

Để 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:

ADD-IN CHỌN NGÀY TRONG EXCEL 

Ứ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:

  1. Điền vào nó với dữ liệu khi Biểu mẫu được tải.
  2. Chọn trước một mục.
  3. Lấy (các) mục hiện được chọn.  
  4. Hoàn thiện một hành động khi người dùng chọn một mục khác.

Lấp đầy dữ liệu vào Combobox

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ó.

Điền vào ComboBox từ một dải ô

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.

Điền vào control VBA ComboBox – Không có bản sao

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.

VBA ComboBox – Ví dụ 1

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.

VBA ComboBox – Ví dụ 2

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ơ:

  1. Khi chúng ta tải hộp tổ hợp quốc gia – Initialize Event 
  2. Khi người dùng chọn một quốc gia – Change Event

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

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.

Bảng ListBox Cheat

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ị.

  • ListBox là control VBA hiển thị danh sách các mục có sẵn để chọn.  
  • ComboBox là control VBA chỉ hiển thị mục đã chọn. Bạn phải nhấp vào ComboBox để xem các mục có sẵn khác.

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é!

 


Tác giả: dtnguyen (Nguyễn Đức Thanh)

· · ·

Khóa học mới xuất bản