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
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).
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. Thuộc tính Hide dùng để ẩn form.
4. Một ví dụ về cách sử dụng UserForm trong VBA
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
Lúc này giao diện sẽ như sau.
4. Thay đổi Name và Caption của các control.
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.
DinnerPlannerUserForm.Show End Sub2. Tại sự kiện UserForm_Initialize, chúng ta sẽ thêm dữ liệu cho các combobox.
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 SubBướ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.
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() chúng tôi = MoneySpinButton.Value End Sub 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 Call UserForm_Initialize End Sub Unload Me End SubBước 4: Kiểm tra ứng dụng