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

            Cách lấy lại thanh công cụ trong Photoshop bị ẩn        
            Tải bộ thư viện Brush Photoshop đẹp cho Designer chuyên nghiệp        
            Các vòng lặp trong VBA: Vòng lặp For và Do While        
                Cách khai báo biến trong PHP, các loại biến thường gặp            
                Download và cài đặt Vertrigo Server            
                Thẻ li trong HTML            
                Thẻ article trong HTML5            
                Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên            
                Cách dùng thẻ img trong HTML và các thuộc tính của img            
                Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng