UserForm trong VBA: Cách tạo và sử dụng Form Excel
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.
Bài viết này được đăng tại [free tuts .net]
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é.
Control | Name | Caption |
---|---|---|
Userform | DinnerPlannerUserForm | Dinner Planner |
Text Box | NameTextBox | |
Text Box | PhoneTextBox | |
List Box | CityListBox | |
Combo Box | DinnerComboBox | |
Check Box | DateCheckBox1 | June 13th |
Check Box | DateCheckBox2 | June 20th |
Check Box | DateCheckBox3 | June 27th |
Frame | CarFrame | Car |
Option Button | CarOptionButton1 | Yes |
Option Button | CarOptionButton2 | No |
Text Box | MoneyTextBox | |
Spin Button | MoneySpinButton | |
Command Button | OKButton | OK |
Command Button | ClearButton | Clear |
Command Button | CancelButton | Cancel |
7 Labels | Không đổi | Name:, Phone Number:, etc. |
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 Sub
3. 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 Sub
5. Click dúp chuột vào Cancel button và nhập đoạn code sau.
Private Sub CancelButton_Click() Unload Me End Sub
Bướ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!