网站首页 > 技术文章 正文
VBA EXCEL的窗体是程序面向对象编程的具体体现,是提供给用户的使用的“用户界面”,窗体的设计类似于网页的设计,简单、实用、美观等都是设计者要考虑的因素。
在VBE操作界面菜单中点击【插入】,选择【用户窗体】插入窗体。用鼠标点击窗体弹出【工具箱】窗体,其中标准控件如下图:
一、窗体间相互调用
1、窗体设计
首先,在VBA管理界面中插入3个窗体。
- 窗体1为欢迎窗体
- 主窗体2中添加1个命令按钮
- 子窗体3中添加1个命令按钮
窗体1-欢迎窗体属性表如下:
用途 | 对象 | 属性 | 属性值 |
欢迎窗体 | 窗体 | 名称 | frmSplash |
Caption | Splash窗体 | ||
Picture | D:\baiduclouddisk\source\HTMLCSS\img\test2.jpg(本地) | ||
http://studio.galaxystatistics.com/shiny/rSHIndex/pic/test1.jpg(网上) | |||
欢迎文字 | 标签 | 名称 | Label1 |
Caption | 欢迎使用银河统计系统 |
注:按表设计窗体和标签属性
窗体2-主窗体属性表如下:
用途 | 对象 | 属性 | 属性值 |
主窗体 | 窗体 | 名称 | frmMain |
Caption | 主窗体 | ||
调用子窗体 | 命令按钮 | 名称 | cmdCallSub |
Caption | 调用子窗体 |
窗体3-子窗体属性表如下:
用途 | 对象 | 属性 | 属性值 |
子窗体 | 窗体 | 名称 | frmSub |
Caption | 子窗体 | ||
返回主窗体 | 命令按钮 | 名称 | cmdCallMain |
Caption | 返回主窗体 |
2、窗体视图
设计完成欢迎窗体本身和标签的属性后,运行窗体(点击三角形按钮或按F5键),效果图如下:
注:标签字体、颜色等属性需要修改。特别是标签的BoderStyle属性需要设置为0(使得标签无背景)
主窗体视图如下:
子窗体视图如下:
3、窗体加载事件
鼠标双击欢迎窗体打开【代码】窗口,在窗体的Activate事件中编写代码如下:
注:窗体运行激发Activate事件。事件中第2行代码可动态加载窗体背景图片,第3行代码中窗体打开5秒后调用过程CloseSplash(关闭该窗体)
在工程中插入一个模块,在模块中编写中过程CloseSplash代码如下:
Private Sub CloseSplash()
Unload frmSplash
frmMain.Show
End Sub
注:过程中第2行代码卸载欢迎窗体,第3行代码显示主窗体
主窗体的“调用子窗体”命令按钮(名称为cmdCallSub)的Click事件代码如下:
Private Sub cmdCallSub_Click()
frmMain.Hide
frmSub.Show
End Sub
注:事件中第2行代码隐藏主窗体,第3行代码显示子窗体
子窗体的“返回主窗体”命令按钮(名称为cmdCallMain)的Click事件代码如下:
Private Sub cmdCallMain_Click()
Unload Me
frmMain.Show
End Sub
注:事件中第2行代码卸载子窗体,第3行代码显示子窗体
最后,鼠标双击【工程】中【ThisWorkbook】对象,选用【WorkBook】的Open事件,如图:
【WorkBook】对象的Open事件代码如下:
Private Sub Workbook_Open()
frmSplash.Show
End Sub
注:打开EXCEL文档时显示欢迎窗体
这样,每次打开打开EXCEL文档时显示欢迎窗体时,首先显示欢迎窗体,5秒后自动进入主窗体;在主窗体中点击“调用子窗体”命令按钮,隐藏主窗体并显示子窗体;在子窗体中点击“返回主窗体”命令按钮,卸载子窗体并显示主窗体。从而实现了一个简单的系统框架。
二、标准控件运用
2、文字框设计
文字框主要用来接收用户输入信息,也可以用来显示信息供用户修改。文字框控件可接收用户输入的文本、数字、单元格引用或格式等数据。
I、文字框常用属性
- EnterKeyBehavior:设置文字框中按下Enter键的效果,和MultiLine属性同时设为True时,Enter键可以实现换行,否则将按Tab键功能顺序跳转到下一个对象;
- MaxLength:设置文字框中能够输入字符的最大数量。默认为0,表示输入字符没有数量限制;
- MultiLine:设置文字框能否接受和显示多行文本。属性值为True显示多行文本,False只容纳单行文本;
- PasswordChar:文字框中字符显示为“*”,用于密码口令输入;
- ScrollBars:设置文字框是否有垂直或水平滚动条;
- Text:设置或返回文字框中内容,与Value属性相同。
II、文字框常用方法
- Copy:将文本框中选中的文本复制到剪贴板;
- Cut:将文本框中选中的文本移动到剪贴板;
- Paste:把剪贴板上的文本粘贴到文本框中。
III、文字框常用事件
- AfterUpdate:更改文本框中数据后触发该事件;
- BeforeUpdate:文本框中数据被改变之前触发该事件。事件参数Cancel设置为True,焦点仍然停留在文字框上,并且AfterUpdate事件和Exit事件都不会发生;
- Change:文字框中数据发生变化后触发该事件;
- Enter:通过鼠标或Tab键进入文字框(成为焦点)时触发该事件;
- Exit:离开文字框(成为焦点)时触发该事件。
IV、文字框运用实例 - 信息注册
文字框及窗体属性表如下:
用途 | 对象 | 属性 | 属性值 |
主窗体 | 窗体 | 名称 | frmInput |
Caption | 注册 | ||
姓名 | 文字框1 | 名称 | txtName |
maxLength | 10 | ||
性别 | 选项按钮1 | 名称 | optMan |
Caption | 男 | ||
Value | True | ||
选项按钮2 | 名称 | optWoman | |
Caption | 女 | ||
民族 | 文字框2 | 名称 | txtNation |
出生年月 | 文字框3 | 名称 | txtBirthday |
maxLength | 10 | ||
身份证 | 文字框4 | 名称 | txtID |
maxLength | 18 | ||
联系电话 | 文字框5 | 名称 | txtPhone |
通讯地址 | 文字框6 | 名称 | txtAddress |
备注 | 文字框7 | 名称 | txtMemo |
MultiLine | True | ||
登记 | 命令按钮1 | 名称 | cmdSave |
Caption | 登记 | ||
关闭 | 命令按钮2 | 名称 | cmdClose |
Caption | 关闭 |
按属性表设计的文字框窗体效果图如下:
按面向对象程序设计思路,分布为不同文本框设计相应代码。
- 为【出生年月】文本框的BeforeUpdate事件编写检查代码,用来检查输入的日期格式是否正确。代码如下:
Private Sub txtBirthday_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsDate(txtBirthday.Value) Then
MsgBox "请输入正确的出生日期!", , "提示"
txtBirthday.SelStart = 0
txtBirthday.SelLength = Len(txtBirthday.Value)
Cancel = True
End If
End Sub
注:如果在【出生年月】文本框中输入错误的日期格式,将弹出错误提示窗口,文本框中错误文本被自动全选。正确的日期格式如,1997-12-24、1997/12/24、12、24、1997等
- 为【登记】命令按钮的Click事件编写代码,将窗体中用户输入的文本框内容添加到工作表中。代码如下:
Private Sub cmdSave_Click()
If txtName.Value = "" Then
MsgBox "请输入员工姓名!", , "提示"
txtName.SetFocus
Exit Sub
End If
setData 'setData为自定义过程
End Sub
- 在【模块1】编写setData自定义过程代码如下:
Public Sub setData()
Dim intRow As Integer
intRow = Sheet1.Range("A1").CurrentRegion.Rows.Count '获取已有数据行
intRow = intRow + 1 '计算出新行(数据录入行)
Sheet1.Cells(intRow, 1) = frmInput.txtName.Value
If frmInput.optMan Then
Sheet1.Cells(intRow, 2) = "男"
Else
Sheet1.Cells(intRow, 2) = "女"
End If
Sheet1.Cells(intRow, 3) = frmInput.txtNation.Value
Sheet1.Cells(intRow, 4) = frmInput.txtBirthday.Value
Sheet1.Cells(intRow, 5).NumberFormatLocal = "@" '设置单元格为文本格式
Sheet1.Cells(intRow, 5) = frmInput.txtID.Value
Sheet1.Cells(intRow, 6).NumberFormatLocal = "@"
Sheet1.Cells(intRow, 6) = frmInput.txtPhone.Value
Sheet1.Cells(intRow, 7) = frmInput.txtAddress.Value
Sheet1.Cells(intRow, 8) = frmInput.txtMemo.Value
End Sub
注:如果工作表记录为空,第1次执行过程从第2行起记录用户输入数据,第1行为预留表头
- 为【关闭】命令按钮的Click事件编写代码如下:
Private Sub cmdClose_Click()
Unload Me '卸载窗体
End Sub
按要求完成文字框设计与运用步骤,运行后可以按设计要求按行录入数据,即完成了一个简单的信息录入系统。当然,一个实用的信息录入系统还需要更多、更严格的文本框数据校验、重复记录校验等。
2、复选框设计
复选框用来表示一个特点的状态是选定还是清除,在程序中为用户提供从两种方案中任选其一的操作。复选框可以彼此独立工作,用户可以同时选择多个复选框(即多选选择情况下使用复选框)
I、复选框常用属性和事件
除了共有的属性外,复选框有如下几个特殊属性。
- Picture:为复选框指定一个图片;
- Value:设置或返回复选框的选择状态。当选中复选框时,该属性为True、反之为False;
- TripleState:决定用户能否为复选框指定Null状态。该属性为True时可以在3个状态(True、False、Null)中选择,反之在2个状态(True、False)中选择。
复选框最常用的事件是Click(鼠标点击事件),用户选中复选框时其属性Value值变为True。程序运行时,如果使用代码改变复选框的Value属性值也会发生Click事件。
II、复选框运用实例 - 设置EXCEL选项
窗体及复选框属性表如下:
用途 | 对象 | 属性 | 属性值 |
主窗体 | 窗体 | 名称 | frmOption |
Caption | 选项(多选) | ||
网格线 | 复选框1 | 名称 | chkGridLines |
Caption | 显示网格线 | ||
行列标题 | 复选框2 | 名称 | chkHeadings |
Caption | 显示行列标题 | ||
标尺 | 复选框3 | 名称 | chkRuler |
Caption | 显示标尺 | ||
水平滚动条 | 复选框4 | 名称 | chkHScrollBar |
Caption | 显示水平滚动条 | ||
垂直滚动条 | 复选框5 | 名称 | chkVScrollBar |
Caption | 显示垂直滚动条 | ||
工作表标签 | 复选框6 | 名称 | chkTabs |
Caption | 显示工作表标签 | ||
确定 | 命令按钮1 | 名称 | cmdOK |
Caption | 确定 | ||
Default | True | ||
放弃 | 命令按钮2 | 名称 | cmdCancel |
Caption | 放弃 | ||
Cancel | True |
按属性表设计的复选框窗体效果图如下:
鼠标双击用户窗体进入【代码】窗口,为窗体的Initialize(初始化)事件编写代码获取EXCEL中的相关选项值,并使用该值初始化用户窗体中的各复选框。代码如下:
Private Sub UserForm_Initialize()
With ActiveWorkbook.Windows(1)
chkDridLines.Value = .DisplayGridlines
chkHeadings.Value = .DisplayHeadings
chkRuler.Value = .DisplayRuler
chkHScrollBar.Value = .DisplayHorizontalScrollBar
chkVScrollBar.Value = .DisplayVerticalScrollBar
chkTabs.Value = .DisplayWorkbookTabs
End With
End Sub
当用户设置不同复选框的值后,单击【确定】按钮,即可以根据复选框中的值来修改EXCEL中的相关选项。代码如下:
Private Sub cmdOK_Click()
With ActiveWorkbook.Windows(1)
.DisplayGridlines = chkDridLines.Value
.DisplayHeadings = chkHeadings.Value
.DisplayRuler = chkRuler.Value
.DisplayHorizontalScrollBar = chkHScrollBar.Value
.DisplayVerticalScrollBar = chkVScrollBar.Value
.DisplayWorkbookTabs = chkTabs.Value
End With
End Sub
窗体中【放弃】按钮代码如下:
Private Sub cmdCancel_Click()
Unload Me '卸载窗体
End Sub
3、选项按钮设计
选项按钮控件即网页或其它编程语言中的单选按钮。通常选项按钮是分组的,在一组选项按钮中只有一个处于选中或按下状态。
I、选项按钮常用属性和事件
除了共有的属性外,选项按钮有如下几个特殊属性。
- GroupName:创建一个互相排斥的选项按钮控件组;
- Picture:为选项按钮指定一个图片;
- Value:设置或返回选项按钮的选择状态。当选中选项按钮时,该属性为True、反之为False;
- TripleState:决定用户能否为选项按钮指定Null状态。该属性为True时可以在3个状态(True、False、Null)中选择,反之在2个状态(True、False)中选择。
和复选框相同,选项按钮最常用的事件也是Click(鼠标点击事件),用户选中选项按钮时其属性Value值变为True。程序运行时,如果使用代码改变选项按钮的Value属性值也会发生Click事件。
II、选项按钮运用实例 - 设置窗体字号和颜色
向用户窗体添加1个标签控件、1个多行文字控件、2个框架控件和8个选项按钮控件,并设置各控件的属性值如下表:
用途 | 对象 | 属性 | 属性值 |
主窗体 | 窗体 | 名称 | frmFontsize |
Caption | 设置字号和颜色 | ||
提示信息 | 名称 | 请输入文本 | |
接受用户输入文字 | 文字框 | 名称 | txtFont |
MultiLine | True | ||
字号分组 | 框架1 | Caption | 字号 |
字号大小 | 选项按钮1 | 名称 | opt10 |
Caption | 10 | ||
GroupName | gName1 | ||
选项按钮2 | 名称 | opt15 | |
Caption | 15 | ||
GroupName | gName1 | ||
选项按钮3 | 名称 | opt20 | |
Caption | 20 | ||
GroupName | gName1 | ||
选项按钮4 | 名称 | opt25 | |
Caption | 25 | ||
GroupName | gName1 | ||
颜色分组 | 框架2 | Caption | 颜色 |
字号大小 | 选项按钮5 | 名称 | optBlack |
Caption | 黑色 | ||
GroupName | gName2 | ||
选项按钮6 | 名称 | optRed | |
Caption | 红色 | ||
GroupName | gName2 | ||
选项按钮7 | 名称 | optGreen | |
Caption | 绿色 | ||
GroupName | gName2 | ||
选项按钮8 | 名称 | optYellow | |
Caption | 黄色 | ||
GroupName | gName2 | ||
设置字号和颜色 | 命令按钮 | 名称 | cmdSetStyle |
Caption | 确认 |
按属性表设计的选项按钮窗体效果图如下:
为【确定】命令按钮Click事件编写处理代码如下:
Private Sub cmdSetStyle_Click()
Dim cc As Control
For Each cc In Me.Controls '遍历窗体控件
'If UCase(TypeName(cc)) = "TEXTBOX" Then cc.Text = "如果为文本框"
If UCase(TypeName(cc)) = "OPTIONBUTTON" Then '如果为选项按钮
If cc.Value And cc.GroupName = "gName1" Then frmFontsize.txtFont.Font.Size = CInt(cc.Caption)
If cc.Value And cc.GroupName = "gName2" Then '按钮选中且为第2组
If cc.Caption = "黑色" Then frmFontsize.txtFont.ForeColor = vbBlack
If cc.Caption = "红色" Then frmFontsize.txtFont.ForeColor = vbRed
If cc.Caption = "绿色" Then frmFontsize.txtFont.ForeColor = vbGreen
If cc.Caption = "黄色" Then frmFontsize.txtFont.ForeColor = vbYellow
End If
End If
Next
End Sub
注:代码遍历窗体所有控件,并通过判断属性值设置文本框中字体和颜色
4、列表框设计
列表框主要用来显示项目列表。当项目总数超过列表框控件高度时,列表框会自动添加垂直滚动条,用户可以从列表框中选择一项或多项数据选项。
I、列表框常用属性
列表框显示多行文本,并且每行文本是一个可以独立处理的项。其特有属性如下:
- ColumnCount:设置列表框显示的列数;
- ColumnHeads:设置是否显示列表框的列标题;
- ColumnWidths:指定列表框各列的宽度;
- List:获取或设置列表框中列表项的内容(通过List(下标值));
- ListCount:表示列表框中的列表项数量;
- ListIndex:返回列表框中选中选项的序号;
- MultiSelect:是否允许列表框进行多项;
- Selected:表示列表框中各个列表项是否被选中,为数组。
注:当MultiSelect属性设置为Extended或Simple,必须用列表框的Selected属性确定选定条目
II、列表框常用方法
- AddItem:增加列表项。一般格式,
[对象名].AddItem[项字符串][.索引值]
其中,项字符串用双引号""界定,索引值从0开始; - RemoveItem:移除列表项。一般格式,
[对象名].RemoveItem[索引值]
其中,索引值是必须的,表示欲删除哪一项; - Clear:清除列表中所有内容。
III、列表框运用实例 - 列表框间移动数据
- 向用户窗体添加2个列表框控件、8个命令按钮和2个标签控件。设置各控件的属性值如下表:
用途 | 对象 | 属性 | 属性值 |
主窗体 | 窗体 | 名称 | frmList |
Caption | 列表框示例 | ||
左侧列表框 | 列表框1 | 名称 | lstLeft |
右侧列表框 | 列表框2 | 名称 | lstRight |
右移列表框所有数据 | 命令按钮1 | 名称 | cmdToRightAll |
Caption | >> | ||
右移列表框选中数据 | 命令按钮2 | 名称 | cmdToRight |
Caption | > | ||
左移列表框所有数据 | 命令按钮3 | 名称 | cmdToLeftAll |
Caption | << | ||
左移列表框选中数据 | 命令按钮4 | 名称 | cmdToLeft |
Caption | < | ||
添加数据 | 命令按钮5 | 名称 | cmdAdd |
Caption | 添加图书 | ||
删除左侧列表框选中数据 | 命令按钮6 | 名称 | cmdDel |
Caption | 删除图书 | ||
清空两个列表框 | 命令按钮7 | 名称 | cmdClear |
Caption | 清空 | ||
关闭 | 命令按钮8 | 名称 | cmdClose |
Caption | 关闭 |
- 用户窗体显示效果如下:
- 在户窗体的Initialize事件中编写代码用于从工作表添加数据到列表框。
Private Sub UserForm_Initialize()
Dim r As Range, i As Integer
With ActiveWorkbook.Worksheets("sheet1")
i = .Range("A1").End(xlDown).Row '已有数据行数
Set r = .Range(Cells(2, 1), Cells(i, 1)) '获取已有数据引用
End With
For i = 1 To r.Rows.Count '添加数据到列表框
lstLeft.AddItem r(i)
Next i
If lstLeft.ListCount >= 1 Then
cmdToRight.Enabled = True
cmdToRightAll.Enabled = True
Else
cmdToLeft.Enabled = False
cmdToLeftAll.Enabled = False
End If
cmdToLeft.Enabled = False
cmdToLeftAll.Enabled = False
End Sub
在运行这段代码前,先在工作表sheet1中录入数据,如图:
并运行代码后效果如下图:
- 点击命令按钮 >>(cmdToRightAll),将左侧数据项全部移至右侧列表框中。
Private Sub cmdToRightAll_Click()
Do While lstLeft.ListCount > 0 '循环处理所有数据项
lstRight.AddItem lstLeft.List(0) '添加列表框中的第1项
lstLeft.RemoveItem 0 '删除左侧列表框第1项
Loop
If lstRight.ListCount > 0 Then
cmdToLeft.Enabled = True
cmdToLeftAll.Enabled = True
End If
cmdToRight.Enabled = False
cmdToRightAll.Enabled = False
End Sub
- 点击命令按钮 <<(cmdToLeftAll),将右侧数据项全部移至左侧列表框中。
Private Sub cmdToLeftAll_Click()
Do While lstRight.ListCount > 0
lstLeft.AddItem lstRight.List(0)
lstRight.RemoveItem 0
Loop
If lstLeft.ListCount > 0 Then
cmdToRight.Enabled = True
cmdToRightAll.Enabled = True
End If
cmdToLeft.Enabled = False
cmdToLeftAll.Enabled = False
End Sub
- 点击命令按钮 >(cmdToRight),将左侧选中数据项移至右侧列表框中。
Private Sub cmdToRight_Click()
If lstLeft.ListIndex >= 0 Then
lstRight.AddItem lstLeft.Text '右侧列表框增加新数据项
lstLeft.RemoveItem lstLeft.ListIndex '删除左侧列表框选中项
End If
If lstRight.ListCount > 0 Then
cmdToLeft.Enabled = True
cmdToLeftAll.Enabled = True
End If
If lstLeft.ListCount > 0 Then
cmdToRight.Enabled = True
cmdToRightAll.Enabled = True
Else
cmdToRight.Enabled = False
cmdToRightAll.Enabled = False
End If
End Sub
注:应先选中左侧某数据项,然后再点击单项右移按钮
- 点击命令按钮 <(cmdToLeft),将右侧选中数据项移至左侧列表框中。
Private Sub cmdToLeft_Click()
If lstRight.ListIndex >= 0 Then
lstLeft.AddItem lstRight.Text '左侧列表框增加新数据项
lstRight.RemoveItem lstRight.ListIndex '删除右侧列表框选中项
End If
If lstLeft.ListCount > 0 Then
cmdToRight.Enabled = True
cmdToRightAll.Enabled = True
End If
If lstRight.ListCount > 0 Then
cmdToLeft.Enabled = True
cmdToLeftAll.Enabled = True
Else
cmdToLeft.Enabled = False
cmdToLeftAll.Enabled = False
End If
End Sub
注:应先选中右侧某数据项,然后再点击单项左移按钮
- 点击命令按钮【添加图书】,将用户通过对话框输入的书名添加到左侧列表框中。
Private Sub cmdAdd_Click()
Dim str As String
str = InputBox("请输入向列表框添加的新书名:")
If Trim(str) <> "" Then lstLeft.AddItem str
End Sub
Private Sub cmdDel_Click()
If lstLeft.ListIndex >= 0 Then
lstLeft.RemoveItem lstLeft.ListIndex
End If
End Sub
Private Sub cmdDel_Click()
If lstLeft.ListIndex >= 0 Then
lstLeft.RemoveItem lstLeft.ListIndex
End If
End Sub
Private Sub cmdClose_Click()
Unload frmList
End Sub
5、复合框设计
复合框将文本框和列表框的特性结合在一起,即可以在该控件中的文本框部分输入文字信息,也可以在控件的列表框部分选择某项信息。
I、复合框常用属性
- ListRows:指定复合框的下拉列表中显示的最大行数。如果列表中的题目数超出了ListRows属性的值,则在复合框的列表框部分的右边出现滚动条;
- Style:该属性设置复合框的两种形式。FmStyleDropDownCombo下拉式复合框、值为0,它可可输入编辑区和下拉式列表组成,用户即可由编辑区输入内容,也从下拉列表中选择信息。FmStyleDropDownList下拉式列表框、值为2,用户只能从列表中选择信息;
- Text:用于返回在列表中选择的文本或在编辑区中输入的文本,也可在窗体设计时设定。
II、复合框常用事件和方法
和列表框类似,复合框也使用AddItem、RemoveItem等方法。根据复合框的类型不同,复合框所响应的事件也有所不同。当复合框的Style属性值为0或2时,能够响应Click和Dropdown事件,当tyle属性值为0时还可以接收Change事件。
III、复合框运用实例 - 电脑配置信息
- 向用户窗体添加5个标签控件、1个文本框控件、4个复合框控件和2个命令按钮控件。设置各控件的属性值如下表:
用途 | 对象 | 属性 | 属性值 |
主窗体 | 窗体 | 名称 | frmComputer |
Caption | 微机配置 | ||
显示配置 | 文本框1 | 名称 | txtComputer |
MultiLine | True | ||
CPU列表 | 复框1 | 名称 | cmbCPU |
内存列表 | 复合框2 | 名称 | cmbMem |
硬盘列表 | 复合框3 | 名称 | cmbHDD |
显示器列表表 | 复合框4 | 名称 | cmbDisp |
确定 | 命令按钮1 | 名称 | cmdAdd |
Caption | 确定 | ||
Defult | True | ||
关闭 | 命令按钮2 | 名称 | cmdClose |
Caption | 关闭 | ||
Cancel | True |
- 用户窗体显示效果如下:
- 在户窗体的Initialize事件中编写代码用于从工作表添加数据到列表框。
Private Sub UserForm_Initialize()
With cmbCPU
.AddItem "QX6850 3.0GHz"
.AddItem "QX6800 3.93GHz"
.AddItem "QX6700 2.66GHz"
.AddItem "X7800 2.6GHz"
.AddItem "QX6450 2.6GHz"
.AddItem "QX6250 3.4GHz"
.AddItem "QX2850 3.6GHz"
.AddItem "QX5870 3.8GHz"
.AddItem "QX9150 3.23GHz"
.AddItem "QX4250 3.13GHz"
.Text = .List(0)
End With
With cmbMem
.AddItem "512M"
.AddItem "1G"
.AddItem "2G"
.AddItem "3G"
.AddItem "4G"
.Text = .List(0)
End With
With cmbHDD
.AddItem "80G"
.AddItem "120G"
.AddItem "160G"
.AddItem "250G"
.Text = .List(0)
End With
With cmbDisp
.AddItem "CTR 19寸"
.AddItem "CTR 21寸"
.AddItem "LCD 17寸"
.AddItem "LCD 19寸"
.AddItem "LCD 22寸"
.Text = .List(0)
End With
End Sub
- 点击【确定】按钮,可在左侧文本框中显示计算机配置列表。该按钮Click事件代码如下:
Private Sub cmdAdd_Click()
Dim str As String
str = "CPU: " & cmbCPU.Value & Chr(13) 'Chr(13)表示换行
str = str & "内存: " & cmbMem.Value & Chr(13)
str = str & "硬盘: " & cmbHDD.Value & Chr(13)
str = str & "显示器: " & cmbDisp.Value
txtComputer.Value = str
End Sub
6、滚动条设计
滚动条分为横向和纵向滚动条,它是可以放在窗体中的独立控件。通过将已放置在窗体中滚动条进行水平或垂直拖动来调整其它对象的属性值。
I、滚动条常用属性
- LargeChange:当用户点击滚动条区域时返回Value属性值的改变量;
- SmallChange:当用户点击滚动条箭头时返回Value属性值的改变量;
- Max:当滚动框处于底部或最右位置时,返回滚动条Value属性值的的最大设置值;
- Mim:当滚动框处于顶部或最左位置时,返回滚动条Value属性值的的最小设置值;
- Value:滚动条的当前位置,其返回值介于Min和Max之间,包括这两个值。Max为32767、Min为0。
注:Min和Max得属性值范围是?32768~32767?32768~32767,默认值
II、滚动条常用事件
- Change:滚动滚动框或通过代码改变Value值时触发该事件;
- Scroll:滚动框被重新定位,或按水平或垂直方向滚动时发生该事件。
注:Change是滚动完成后触发,Scroll是在滚动过程中触发
III、滚动条运用实例 - 显示工作表比例
- 向用户窗体添加2个框架框控件、3个滚动条控件、1个文本框控件和1个命令按钮控件。设置各控件的属性值如下表:
用途 | 对象 | 属性 | 属性值 |
主窗体 | 窗体 | 名称 | frmZoom |
Caption | 显示比例 | ||
缩放工作表 | 框架1 | 名称 | Frame1 |
Caption | 缩放工作表 | ||
滚动条1 | 名称 | scbZoom | |
Max | 400 | ||
Min | 10 | ||
Value | 100 | ||
文本框1 | 名称 | txtZoom | |
滚动工作表 | 框架2 | 名称 | Frame2 |
滚动条1 | 名称 | scbH | |
滚动条2 | 名称 | scbV | |
关闭 | 命令按钮2 | 名称 | cmdClose |
Caption | 关闭 | ||
Cancel | True |
- 用户窗体显示效果如下:
- 在户窗体的Initialize事件中编写代码设置滚动条的初始值。
Private Sub UserForm_Initialize()
txtZoom.Value = ActiveWindow.Zoom '文本框显示当前比例
With scbZoom
.Min = 10
.Max = 400
.SmallChange = 1
.LargeChange = 10
.Value = ActiveWindow.Zoom
End With
With scbH
.Min = 1
.Max = ActiveSheet.Cells.Columns.Count '最大列数
.SmallChange = 1
.LargeChange = 10
.Value = ActiveWindow.ScrollColumn '当前列
End With
With scbV
.Min = 1
.Max = ActiveSheet.Cells.Rows.Count '最大行数
.SmallChange = 1
.LargeChange = 10
.Value = ActiveWindow.ScrollRow '当前行
End With
End Sub
- 为缩放工作表框架中滚动条的Change事件编写代码对当前窗口进行缩放。
Private Sub scbZoom_Change()
With ActiveWindow
.Zoom = scbZoom.Value '用滚动条的值设置当前窗口的缩放
txtZoom.Text = .Zoom '设置文本框的值
.ScrollColumn = scbH.Value '最左边的列号
.ScrollRow = scbV.Value '最顶端的行号
End With
End Sub
- 为窗体右侧滚动工作表框架中水平滚动条的Change事件编写代码。
Private Sub scbH_Change()
ActiveWindow.ScrollColumn = scbH.Value
End Sub
7、旋转按钮设计
旋转按钮控件主要用来输入一定范围内的整数值,一般将旋转按钮和文本框结合起来使用。点击旋转按钮只会更改旋转按钮的值,还需要编写代码修改与之结合的文本框的值。
I、旋转按钮常用属性
- SmallChange:点击旋转按钮箭头时的改变量;
- Max:旋转按钮上限值;
- Mim:旋转按钮上限值;
- Value:旋转按钮当前值。
II、旋转按钮常用事件
旋转按钮控件的Value属性值改变时,将触发Change事件,一般在该事件中编写代码来控制Value属性值,并应用的与之关联的文本框中。另外,当点击旋转按钮的上箭头(↑)和下箭头(↓ )时触发SpinUp和SpinDown事件。
III、旋转按钮运用 - 修改日期和时间
- 向用户窗体添加8个标签控件、3个滚动条控件、6个文本框控件、6个旋转按钮控件和2个命令按钮控件。设置各控件的属性值如下表:
用途 | 对象 | 属性 | 属性值 |
主窗体 | 窗体 | 名称 | frmDate |
Caption | 修改日期和时间 | ||
显示年 | 文本框1 | 名称 | txtYear |
MaxLength | 4 | ||
显示月 | 文本框2 | 名称 | txtMonth |
MaxLength | 2 | ||
显示日 | 文本框3 | 名称 | txtDay |
MaxLength | 2 | ||
显示时 | 文本框4 | 名称 | txtHour |
MaxLength | 2 | ||
显示分 | 文本框5 | 名称 | txtMinute |
MaxLength | 2 | ||
显示秒 | 文本框6 | 名称 | txtSecond |
MaxLength | 2 | ||
调整年 | 旋转按钮1 | 名称 | spbYear |
Min | 1900 | ||
Max | 2500 | ||
调整月 | 旋转按钮2 | 名称 | spbMonth |
Min | 1 | ||
Max | 12 | ||
调整日 | 旋转按钮3 | 名称 | spbDay |
Min | 1 | ||
Max | 31 | ||
调整时 | 旋转按钮4 | 名称 | spbHour |
Min | 0 | ||
Max | 23 | ||
调整分 | 旋转按钮5 | 名称 | spbMinute |
Min | 0 | ||
Max | 59 | ||
调整秒 | 旋转按钮6 | 名称 | spbSecond |
Min | 0 | ||
Max | 59 | ||
关闭 | 命令按钮1 | 名称 | cmdQuit |
Cancel | True |
- 用户窗体显示效果如下:
- 在户窗体的Initialize事件中编写代码获取系统当前日期和时间,然后分别显示在相应文本框中,并根据当前的值初始化各旋转按钮的值。
Private Sub UserForm_Initialize()
txtYear.Value = Year(Date)
txtMonth.Value = Month(Date)
txtDay.Value = Day(Date)
txtHour.Value = Hour(Time)
txtMinute.Value = Minute(Time)
txtSecond.Value = Second(Time)
End Sub
在日期设置过程中,需要为反映天数的文本框(txtDay)设置最大天数。
- 对文本框(txtDay)的Change事件编程设置最大天数。
Private Sub txtDay_Change()
Dim dTemp As Date
dTemp = DateSerial(txtYear.Value, txtMonth.Value + 1, 1)
spbDay.Max = Day(dTemp - 1)
MsgBox spbDay.Max
End Sub
- 点击旋转按钮的上箭头(↑)触发SpinUp事件代码。
Private Sub spbYear_SpinUp()
txtYear.Value = txtYear.Value + spbYear.SmallChange
End Sub
- 点击旋转按钮的下箭头(↓)触发SpinDown事件代码。
Private Sub spbYear_SpinDown()
txtYear.Value = txtYear.Value - spbYear.SmallChange
End Sub
注:窗体中其它旋转按钮处理代码相同,这里不再一一列出
8、多页设计
多页控件可以中窗体中显示一系列不同的页面,在处理可以划分为不同类别的大量信息时很有用。利用多页控件能够将相关数据组织在一起显示出来。
I、多页控件的常用属性
多页控件对象为MultiPage,在该控件中还有一个子对象Page。在窗体中点击多页控件对象时,将选中当前的Page对象。Page对象类似一个独立的窗体,每个Page对象都包括自己一套独立的控件。
A. MultiPage对象属性
- MultiRow:设置控件是否有多行标签,当MultiRow属性值为True时标签分行显示,为False时,标签将在一行中显示,右侧将出现左右滚动箭头;
- Value:标识当前激活页,0表示第1页。通过该属性可获得当前激活页,也可通过给Value属性赋值来激活对应页。
B. Page对象属性
- ScrollBars:设置页面是否有垂直或水平滚动条(取值为FmScrollBarsNone:不显示滚动条、FmScrollBarsHorizontal:显示水平滚动条、FmScrollBarsVertical:显示垂直滚动条、FmScrollBarsBoth:同时显示垂直和水平滚动条);
- TransitionEffect:设置从一页转换成另一页时所用的可视效果;
- TransitionPeriod:以毫秒为单位定义一个页面过渡效果的历时长度。
II、多页控件的常用事件
多页控件支持Click等事件,其常用事件是Change事件。当用户选择不同页(改变Value属性值)时触发Change事件,此时Value属值为新激活页的序号。
III、多页运用 - 报名登记
向用户窗体添加1个多页控件和2个命令按钮(这里命令按钮属性设置从略),将控件分为2页,每页属性分别进行设置。注意,如果需要2页以上的多页时,用鼠标右键登记多页控件上方(多页标签右边无标签部分)。
- 第1页【基本信息】页包括3个文本框和2个单选按钮控件:
用途 | 对象 | 属性 | 属性值 |
多页 | 分页1 | 名称 | Page1 |
Caption | 基本信息 | ||
姓名 | 文本框1 | 名称 | txtName |
性别(男性) | 单选按钮1 | 名称 | optMan |
Value | True | ||
性别(女性) | 单选按钮2 | 名称 | optWoman |
Value | False | ||
年龄 | 文本框2 | 名称 | txtAge |
住址 | 文本框3 | 名称 | txtAddress |
- 第2页【家庭信息】页包括4个文本框控件:
用途 | 对象 | 属性 | 属性值 |
多页 | 分页2 | 名称 | Page2 |
Caption | 基本信息 | ||
父亲 | 文本框4 | 名称 | txtFName |
电话 | 文本框5 | 名称 | txtFPhone |
单位 | 文本框6 | 名称 | txtFUnit |
住址 | 文本框7 | 名称 | txtFAddress |
注:多页控件不同页面中控件不能同名
- 用户窗体显示效果如下:
- 点击窗体【保存】按钮,分别从多页控件各个分页中的控件获得用户数据,然后将数据保存在指定工作表中。
Private Sub cmdSave_Click()
Dim r As Integer
If txtName.Value = "" Then
MsgBox "请输入学生姓名!", vbCritical + vbOKOnly
Exit Sub
End If
With Worksheets("sheet2")
r = .UsedRange.Rows.Count + 1 '定位添加数据的行
.Cells(r, 1) = txtName.Value
If optMan.Value Then
.Cells(r, 2) = "男"
Else
.Cells(r, 2) = "女"
End If
.Cells(r, 3) = txtAge.Value
.Cells(r, 4) = txtAddress.Value
.Cells(r, 5) = txtFName.Value
.Cells(r, 6) = txtFPhone.Value
.Cells(r, 7) = txtFUnit.Value
.Cells(r, 8) = txtFAddress.Value
End With
End Sub
注:在向工作表录入数据前,可按分页标签提示在sheet2第1行输入标题
创建自定义窗体对话框(用户界面设计)是运用VBA EXCEL设计数据管理系统的基础,是用户开发数据管理系统的入口和控制中枢。
猜你喜欢
- 2024-12-24 Excel VBA 用户窗体设置/一步一步代你设计EXCEL用户+密码登录界面
- 2024-12-24 家庭收支理财管理系统 Access数据库系统课程设计制作实例
- 2024-12-24 Qt 2D绘图:图形视图框架的事件处理与传播
- 2024-12-24 MFC界面库BCGControlBar v32.1 - 可视化管理器和主题升级
- 2024-12-24 DJYGUI系列文章九:GDD消息系统 gd信息
- 2024-12-24 Qt设备识别(简单的密钥生成器) qt设备管理系统
- 2024-12-24 Access开发的《财务经济管理系统》
- 2024-12-24 初级开发人员告诉我:OO 设计模式太复杂而且没用
- 2024-12-24 从零开始学Qt(89):UDP单播和广播
- 2024-12-24 Qt入门阶段之事件 qtc间期延长的临床意义
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)