本章教您如何创建Excel VBA用户窗体。我们将要创建的用户窗体如下所示:
添加控件
要将控件添加到用户窗体,请执行以下步骤。
1.打开Visual Basic编辑器。如果“项目资源管理器”不可见,请单击“视图”,“项目资源管理器”。
2.单击插入,用户窗体。如果“工具箱”没有自动出现,请单击“视图”,“工具箱”。屏幕设置如下。
3.添加下表中列出的控件。完成此操作后,结果应与前面显示的用户窗体的图片一致。例如,通过在工具箱中单击TextBox创建一个文本框控件。接下来,您可以在用户窗体上拖动一个文本框。到达“汽车”框架时,请记住先绘制该框架,然后再将两个选项按钮放入其中。
4.根据下表更改控件的名称和标题。在Excel VBA代码中使用名称。字幕是显示在屏幕上的字幕。更改控件名称是一个好习惯。这将使您的代码更易于阅读。要更改控件的名称和标题,请单击“视图”,“属性窗口”,然后单击每个控件。
控制 | 名称 | 字幕 |
---|---|---|
用户表格 | DinnerPlannerUserForm | 晚餐计划 |
文本框 | 名称文字框 | |
文本框 | PhoneTextBox | |
列表框 | CityListBox | |
组合框 | 晚餐组合盒 | |
复选框 | DateCheckBox1 | 6月13日 |
复选框 | DateCheckBox2 | 6月20日 |
复选框 | DateCheckBox3 | 6月27日 |
帧 | 车架 | 汽车 |
选项按钮 | CarOptionButton1 | 是 |
选项按钮 | CarOptionButton2 | 没有 |
文本框 | MoneyTextBox | |
旋转按钮 | MoneySpinButton | |
命令按钮 | 确定按钮 | 好 |
命令按钮 | 清除按钮 | 明确 |
命令按钮 | 取消按钮 | 取消 |
7个标签 | 不用换 | 姓名:,电话号码:等 |
注意:组合框是一个下拉列表,用户可以从中选择一个项目或填写自己的选择。只能选择一个选项按钮。
显示用户表格
若要显示用户窗体,请在工作表上放置一个命令按钮,并添加以下代码行:
DinnerPlannerUserForm.Show
End Sub
现在,我们将创建Sub UserForm_Initialize。当您对用户窗体使用Show方法时,此子项将自动执行。
1.打开Visual Basic编辑器。
2.在项目资源管理器中,右键单击DinnerPlannerUserForm,然后单击“查看代码”。
3.从左侧下拉列表中选择“用户表单”。从右侧的下拉列表中选择初始化。
4.添加以下代码行:
'Empty NameTextBox
NameTextBox.Value =“”
'Empty PhoneTextBox
PhoneTextBox.Value =“”
'Empty CityListBox
CityListBox.Clear
'
用 CityListBox 填充 CityListBox
.AddItem“旧金山”
.AddItem“奥克兰”
.AddItem“ Richmond”
最终 凭借
“空DinnerComboBox
DinnerComboBox.Clear
”填充DinnerComboBox
随着 DinnerComboBox
.AddItem‘意大利’
.AddItem‘中国’
.AddItem‘炸薯条和肉’
最终 凭借
“取消选中DataCheckBoxes
DateCheckBox1.Value = 假
DateCheckBox2.Value = 假
DateCheckBox3.Value = 假
“设置无车为默认
CarOptionButton2.Value = 真
”清空MoneyTextBox
MoneyTextBox.Value =‘’
“将焦点设置NameTextBox
NameTextBox.SetFocus
结束 小组
说明:清空文本框,填充列表框和组合框,取消选中复选框,等等。
分配宏
现在,我们已经创建了用户表单的第一部分。尽管它看起来已经很整洁,但是当我们单击用户窗体上的命令按钮时,什么也不会发生。
1.打开Visual Basic编辑器。
2.在项目资源管理器中,双击DinnerPlannerUserForm。
3.双击Money(货币)旋转按钮。
4.添加以下代码行:
MoneyTextBox.Text = MoneySpinButton.Value
结束 子项
说明:此代码行在使用旋转按钮时更新文本框。
5.双击确定按钮。
6.添加以下代码行:
Dim emptyRow as Long
'使Sheet1处于活动状态
Sheet1.Activate
'确定emptyRow
emptyRow = WorksheetFunction.CountA(Range(“ A:A”))+ 1
'传输信息
Cells(emptyRow,1).Value = NameTextBox。 Value
Cells(emptyRow,2).Value = PhoneTextBox.Value
Cells(emptyRow,3).Value = CityListBox.Value
Cells(emptyRow,4).Value = DinnerComboBox.Value
如果 DateCheckBox1.Value = True 然后 Cells(emptyRow,5) .Value = DateCheckBox1.Caption
如果 DateCheckBox2.Value = True, 则单元格(emptyRow,5).Value =单元格(emptyRow,5).Value&“”和DateCheckBox2.Caption
如果 DateCheckBox3.Value = True, 则单元格(emptyRow,5).Value =单元格(emptyRow,5).Value&“ “&DateCheckBox3.Caption
如果 CarOptionButton1.Value = 真 。然后
将细胞(emptyRow,6)。价值= ”是“
否则
将细胞(emptyRow,6)。价值= ”否“
结束 如果
将细胞(emptyRow,7)。价值= MoneyTextBox。价值
结束 子
说明:首先,我们激活Sheet1。接下来,我们确定emptyRow。变量emptyRow是第一个空行,每次添加记录时都会增加。最后,我们将信息从“用户表单”传输到emptyRow的特定列。
7.双击清除按钮。
8.添加以下代码行:
调用 UserForm_Initialize
结束 小组
说明:当您单击清除按钮时,此代码行调用Sub UserForm_Initialize。
9.双击取消按钮。
10.添加以下代码行:
卸载我
End Sub
说明:当您单击“取消”按钮时,此代码行关闭用户窗体。
测试用户表单
退出Visual Basic编辑器,在第1行中输入以下所示的标签,然后测试用户窗体。
结果: