06/04/2021, 14:51

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

insert userform JPG

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

userform giao dien JPG

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.

them doi tuong vao userform JPG

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:

ket qua userform JPG

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.

userform png

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.

user form 1 png

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.

chon properties JPG

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

thay doi ten cac control JPG

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.

show form JPG

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.

test userform result png

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!

Trịnh Tiến Mạnh

27 chủ đề

6824 bài viết

Cùng chủ đề
0