窗体管理和标准控件运用 - EXCEL VBA(20)
bigegpt 2024-12-02 15:23 5 浏览
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设计数据管理系统的基础,是用户开发数据管理系统的入口和控制中枢。
相关推荐
- 悠悠万事,吃饭为大(悠悠万事吃饭为大,什么意思)
-
新媒体编辑:杜岷赵蕾初审:程秀娟审核:汤小俊审签:周星...
- 高铁扒门事件升级版!婚宴上‘冲喜’老人团:我们抢的是社会资源
-
凌晨两点改方案时,突然收到婚庆团队发来的视频——胶东某酒店宴会厅,三个穿大红棉袄的中年妇女跟敢死队似的往前冲,眼瞅着就要扑到新娘的高额钻石项链上。要不是门口小伙及时阻拦,这婚礼造型团队熬了三个月的方案...
- 微服务架构实战:商家管理后台与sso设计,SSO客户端设计
-
SSO客户端设计下面通过模块merchant-security对SSO客户端安全认证部分的实现进行封装,以便各个接入SSO的客户端应用进行引用。安全认证的项目管理配置SSO客户端安全认证的项目管理使...
- 还在为 Spring Boot 配置类加载机制困惑?一文为你彻底解惑
-
在当今微服务架构盛行、项目复杂度不断攀升的开发环境下,SpringBoot作为Java后端开发的主流框架,无疑是我们手中的得力武器。然而,当我们在享受其自动配置带来的便捷时,是否曾被配置类加载...
- Seata源码—6.Seata AT模式的数据源代理二
-
大纲1.Seata的Resource资源接口源码2.Seata数据源连接池代理的实现源码3.Client向Server发起注册RM的源码4.Client向Server注册RM时的交互源码5.数据源连接...
- 30分钟了解K8S(30分钟了解微积分)
-
微服务演进方向o面向分布式设计(Distribution):容器、微服务、API驱动的开发;o面向配置设计(Configuration):一个镜像,多个环境配置;o面向韧性设计(Resista...
- SpringBoot条件化配置(@Conditional)全面解析与实战指南
-
一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...
- 一招解决所有依赖冲突(克服依赖)
-
背景介绍最近遇到了这样一个问题,我们有一个jar包common-tool,作为基础工具包,被各个项目在引用。突然某一天发现日志很多报错。一看是NoSuchMethodError,意思是Dis...
- 你读过Mybatis的源码?说说它用到了几种设计模式
-
学习设计模式时,很多人都有类似的困扰——明明概念背得滚瓜烂熟,一到写代码就完全想不起来怎么用。就像学了一堆游泳技巧,却从没下过水实践,很难真正掌握。其实理解一个知识点,就像看立体模型,单角度观察总...
- golang对接阿里云私有Bucket上传图片、授权访问图片
-
1、为什么要设置私有bucket公共读写:互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可...
- spring中的资源的加载(spring加载原理)
-
最近在网上看到有人问@ContextConfiguration("classpath:/bean.xml")中除了classpath这种还有其他的写法么,看他的意思是想从本地文件...
- Android资源使用(android资源文件)
-
Android资源管理机制在Android的开发中,需要使用到各式各样的资源,这些资源往往是一些静态资源,比如位图,颜色,布局定义,用户界面使用到的字符串,动画等。这些资源统统放在项目的res/独立子...
- 如何深度理解mybatis?(如何深度理解康乐服务质量管理的5个维度)
-
深度自定义mybatis回顾mybatis的操作的核心步骤编写核心类SqlSessionFacotryBuild进行解析配置文件深度分析解析SqlSessionFacotryBuild干的核心工作编写...
- @Autowired与@Resource原理知识点详解
-
springIOCAOP的不多做赘述了,说下IOC:SpringIOC解决的是对象管理和对象依赖的问题,IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系...
- java的redis连接工具篇(java redis client)
-
在Java里,有不少用于连接Redis的工具,下面为你介绍一些主流的工具及其特点:JedisJedis是Redis官方推荐的Java连接工具,它提供了全面的Redis命令支持,且...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- logstashinput (65)
- hadoop端口 (65)
- vue阻止冒泡 (67)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)