Macro VBA – Userform (Form người dùng)

Bài viết hướng dẫn bạn làm thế nào để tạo ra một UserForm trong VBA Excel. UserForm là form để tương tác với user, chúng ta sẽ ví dụ một form như sau:

41

Thêm các điều khiển (ActiveX Controls):

Để thêm các điều khiển lên Userform, ta làm như sau:

1. Mở Visual Basic Editor. Nếu Project Explorer không hiển thị thì click View, Project Explorer.

2. Click Insert, Userform. Nếu Toolbox không tự động xuất hiện, bấm vào View, Toolbox. Màn hình của bạn sẽ được hiển thị như sau:

42

3. Thêm các điều khiển được liệt kê trong bảng dưới đây như hình ảnh trên UserForm thể hiện trước đó. Ví dụ, tạo ra một text box bằng cách click vào TextBox từ hộp công cụ. Tiếp theo kéo text box lên UserForm.

4. Thay đổi tên (name) và chú thích (captions) của các điều khiển theo bảng dưới đây. Tên sẽ được sử dụng trong code của  Excel VBA. Chú thích sẽ xuất hiện trên màn hình của bạn để mô tả thông tin. Ta nên thay đổi tên của điều khiển. để viết code dễ dàng hơn để đọc. Để thay đổi tên (Name) và chú thích  (Caption) của các điều khiển, bấm View, Properties Window và click vào từng điều khiển.

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 No need to change Name:, Phone Number:, etc.

 

Lưu ý: một combo box là một danh sách thả xuống (drop-down list) để người dùng có thể chọn một mục trong danh sách đó.

Hiển thị Userform

Đặt một command button trên worksheet và paste vào đoạn code sau:

Private Sub CommandButton1_Click()

DinnerPlannerUserForm.Show

End Sub

Bây giờ chúng ta sẽ tạo ra các giá trị khởi tạo với Sub UserForm_Initialize. Khi bạn sử dụng Show cho UserForm, sub này sẽ được tự động thực thi.

1. Mở  Visual Basic Editor.

2. Trên Project Explorer, click phải chuột vào DinnerPlannerUserForm và click View Code.

3. Chọn Userform từ danh sách thả xuống bên trái, chọn Initialize danh sách bên phải.

4. Thêm đoạn code bên dưới:

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

Chú ý: các đoạn text sau dâu ‘ (nháy đơn)  là các lời chú thích, nó sẽ không được thực thi khi chạy code.

 

Gán  Macros

Chúng ta đã tạo ra được phần đầu của UserForm. Mặc dù trông có vẻ giống một giao diện tương tác với người dùng,  nhưng không có gì xảy ra khi chúng ta bấm vào các nút lệnh trên UserForm.

1. Mở Visual Basic Editor.

2. Trên Project Explorer, nháy đôi vào DinnerPlannerUserForm.

3. Nháy đôi vào nút Money spin.

4. Thêm đoạn code sau:

Private Sub MoneySpinButton_Change()

MoneyTextBox.Text = MoneySpinButton.ValueEnd Sub

Giải thích: dòng code này update giá trị của text box khi người dùng sử dụng nút spin.

5. Nháy đôi vào nút OK.

6. Thêm đoạn code 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

Giải thích: đầu tiên, chúng ta kích hoạt Sheet1. Tiếp theo, chúng ta xác định emptyRow. Biến emptyRow  là dòng trống đầu tiên và mỗi lần tăng thêm 1 dòng. Cuối cùng, chúng ta chuyển  các thông tin từ các điều khiển trên UserForm để các cột cụ thể của dòng emptyRow.

7. Nháy đôi vào nút Clear.

8. Thêm đọa code sau:

Private Sub ClearButton_Click()

Call UserForm_InitializeEnd Sub

Giải thích: dòng mã này gọi UserForm_Initialize Sub khi bạn nhấn vào nút Clear.

9. Nháy đôi vào nút Cancel.

10. Thêm đọa code sau:

Private Sub CancelButton_Click()

Unload MeEnd Sub

Giải thích: dòng mã này đóng UserForm khi bạn bấm vào nút Cancel.

Kiểm tra Userform

Thoát Visual Basic Editor, nhập thông tin hiển thị dưới đây vào dòng 1 và kiểm tra UserForm.

Kết quả:

Test the Userform

Gửi nhận xét