UserForm trong VBA: Cách tạo và sử dụng Form Excel - ự học Excel VBA
Trong bài này mình sẽ hướng dẫn cách sử dụng UserForm trong VBA, đây là một tính năng rất hay của lập trình Excel, nó giúp ta tạo ra những form nhập dữ liệu một cách nhanh chóng. Chắc chắn bạn đã từng sử dụng những ứng dụng trên Windows như, phần mềm gõ văn bản, phần mềm diệt virus, ... thì giao ...
Trong bài này mình sẽ hướng dẫn cách sử dụng UserForm trong VBA, đây là một tính năng rất hay của lập trình Excel, nó giúp ta tạo ra những form nhập dữ liệu một cách nhanh chóng.
Chắc chắn bạn đã từng sử dụng những ứng dụng trên Windows như, phần mềm gõ văn bản, phần mềm diệt virus, ... thì giao diện của những phần mềm đó ta gọi là ứng dụng Winform, chúng được code dựa trên ngôn ngữ C#, Java, Visual Basic, ...
Còn VBA thì khác, nó hỗ trợ cho bạn tạo được UserForm ở mức đơn giản, sử dụng nhóm đối tượng ActiveX Controls như Command Button, TextBox, ListBox. ComboBox, CheckBox, ...
1. UserForm VBA là gì?
Biểu mẫu UserForm là một hộp thoại nhập dữ liệu trong Excel, giúp kiểm soát được thông tin mà người dùng nhập vào, tạo ra sự tin tưởng dữ liệu cũng như đảm bảo các vấn đề về bảo mật.
Ví dụ: Bạn đang quản lý thông khách hàng trên một file Excel gồm các thông tin như: tên khách hàng, năm sinh, số lượng sản phẩm, danh sách sản phẩm, ... Nếu bạn để cho nhân viên nhập trực tiếp vào file thì sẽ có nguy cơ dữ liệu bị sai sót như:
- Nhập năm sinh bị sai
- Nhập sản phẩm không tồn tại
- Số lượng nhập số âm nên không đúng với yêu cầu
- ...
Nếu bạn tự nhập thì có thể không sao, nhưng bạn giao cho một người nào đó nhập thì nguy cơ không đồng bộ dữ liệu rất có thể sẽ xảy ra. Vì vậy giải pháp là bạn tạo một form nhập dữ liệu, lúc này thông tin được kiểm tra cẩn thận trước khi thêm vào danh sách.
2. Cách tạo UserForm trong VBA
Để tạo UserForm thì bạn thực hiện theo các bước như sau:
1. Mở Visual Basic Editor
2. Click Insert -> UserForm

3. Một form xuất hiện và kèm theo đó là hộp thoại Toolbox (2), đây là hộp đựng các điều khiển ActiveX Control mà bạn có thể thêm vào userform.
Phía bên project bạn sẽ thấy một module UserForm1 được tạo (1).

4. Bạn hãy click vào đối tượng form control muốn sử dụng ở hộp thoại Toolbox và đặt vào trong form nhé. Như hình ảnh dưới đây là mình đã thêm 3 TextBox và 1 Command Button.

5. Chạy UserForm như thế nào nhỉ? Rất đơn giản, tại Visual Basic Editor bạn hãy nhấn F5 thì nó sẽ xuất hiện một giao diện như sau:

Vậy là UserForm đã chạy. Tuy nhiên, đây là một ví dụ demo đơn giản chứ thực tế ta phải làm thêm mấy công đoạn nữa.
3. Hai thuộc tính quan trọng của UserForm
UserForm sẽ không tự động xuất hiện mà thay vào đó bạn phải sử dụng một đoạn code và kết hợp với một sự kiện nào đó.
Giả sử mình có một UserForm1, lúc này các thuộc tính của nó sẽ như sau
Thuộc tính Show dùng để hiển thị Form.
UserForm1.Show
Thuộc tính Hide dùng để ẩn form.
UserForm1.Hide
4. Một ví dụ về cách sử dụng UserForm trong VBA
Giả sử mình đang quản lý dữ liệu cho một khách sạn 5 sao cho một công ty bên Mỹ. Các nhân viên sẽ tiếp nhận đơn hàng và nhập vào danh sách gồm các thông tin như form dưới đây.

Thay vì nhập trực tiếp vào file Excel thì ta sẽ nhập thông qua form này. Các bước thực hiện như sau.
Bước 1: Xây dựng giao diện form
1. Mở Visual Basic Editor. Nếu Project Explorer không có thì hãy click vào View -> Project Explorer để mở nó ra nhé.
2. Click Insert -> UserForm thì sẽ xuất hiện một form. Nếu không có hộp thoại Toolbox thì hãy chọn View -> Toolbox.
Lúc này giao diện sẽ như sau.

3. Thêm các điều khiển control của VBA sao cho giống như giao diện ở hình đầu tiên trong phần 4 này nhé. Tạm thời bạn đừng quan tâm đến tên của các form control nhé.
4. Thay đổi Name và Caption của các control.
Để thay đổi tên và caption cho các control thì bạn hãy click chuột phải vào đối tượng, sau đó chọn Properties.

Một hộp thoại xuất hiện, bạn hãy đổi thông tin ở vùng mà mình đã khoanh tròn nhé.

Bạn phải đặt tên cho các control giống y như bảng dưới đây nhé.
Lưu ý: Combobox sẽ được thêm dữ liệu ở những bước tiếp theo.
Bước 2: Hiển thị form
1. Tạo một Command Button ở ngoài trang tính Excel, sau đó viết sự kiện show form cho nó như sau.
Private Sub CommandButton1_Click()
DinnerPlannerUserForm.Show
End Sub
Mục đích mình muốn khi click vào button này thì sẽ hiển thị form nhập dữ liệu.
2. Tại sự kiện UserForm_Initialize, chúng ta sẽ thêm dữ liệu cho các combobox.
Bạn hãy click chuột phải vào Form và chọn View Source. Sau đó tại phần danh sách xổ xuống bạn chọn đối tượng là UserForm, Event là Initialize. => Một Sub xuất hiện, đây chính là hàm khởi tạo khi form được load lên.

Bạn hãy nhập code cho Sub này như sau.
Private Sub UserForm_Initialize()
'Empty NameTextBox
NameTextBox.Value = ""
'Empty PhoneTextBox
PhoneTextBox.Value = ""
'Empty CityListBox
CityListBox.Clear
'Fill CityListBox
With CityListBox
.AddItem "San Francisco"
.AddItem "Oakland"
.AddItem "Richmond"
End With
'Empty DinnerComboBox
DinnerComboBox.Clear
'Fill DinnerComboBox
With DinnerComboBox
.AddItem "Italian"
.AddItem "Chinese"
.AddItem "Frites and Meat"
End With
'Uncheck DataCheckBoxes
DateCheckBox1.Value = False
DateCheckBox2.Value = False
DateCheckBox3.Value = False
'Set no car as default
CarOptionButton2.Value = True
'Empty MoneyTextBox
MoneyTextBox.Value = ""
'Set Focus on NameTextBox
NameTextBox.SetFocus
End Sub
Bước 3: Thêm vào Macro
Như vậy là ta đã xử lý xong phần giao diện và code xử lý lúc khởi tạo form. Bây giờ là bước code chương trình chính.
1. Click vào Money spin button
2. Một sự kiện Change hiện ra, bạn hãy nhập code cho nó như sau.
Private Sub MoneySpinButton_Change()
MoneyTextBox.Text = MoneySpinButton.Value
End Sub3. Click dúp hai lần vào nút Ok.
Sự kiện click của button hiện ra, bạn hãy nhập code như sau:
Private Sub OKButton_Click()
Dim emptyRow As Long
'Make Sheet1 active
Sheet1.Activate
'Determine emptyRow
emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1
'Transfer information
Cells(emptyRow, 1).Value = NameTextBox.Value
Cells(emptyRow, 2).Value = PhoneTextBox.Value
Cells(emptyRow, 3).Value = CityListBox.Value
Cells(emptyRow, 4).Value = DinnerComboBox.Value
If DateCheckBox1.Value = True Then Cells(emptyRow, 5).Value = DateCheckBox1.Caption
If DateCheckBox2.Value = True Then Cells(emptyRow, 5).Value = Cells(emptyRow, 5).Value & " " & DateCheckBox2.Caption
If DateCheckBox3.Value = True Then Cells(emptyRow, 5).Value = Cells(emptyRow, 5).Value & " " & DateCheckBox3.Caption
If CarOptionButton1.Value = True Then
Cells(emptyRow, 6).Value = "Yes"
Else
Cells(emptyRow, 6).Value = "No"
End If
Cells(emptyRow, 7).Value = MoneyTextBox.Value
End Sub
4. Click dúp chuột vào nút clear và nhập đoạn code sau vào sub mà VBA đã tạo.
Private Sub ClearButton_Click()
Call UserForm_Initialize
End Sub5. Click dúp chuột vào Cancel button và nhập đoạn code sau.
Private Sub CancelButton_Click()
Unload Me
End SubBước 4: Kiểm tra ứng dụng
Bây giờ bạn hãy lưu lại và thử ra ngoài trang tính Excel để thêm dữ liệu nhé. Dưới đây là kết quả mẫu.

Trên là một ví dụ cách sử dụng UserForm trong VBA. Qua bài này hy vọng bạn hiểu nguyên lý hoạt động, cũng như khái niệm UserForm VBA là gì. Chúc bạn thành công!