优秀的编程知识分享平台

网站首页 > 技术文章 正文

窗体管理和标准控件运用 - EXCEL VBA(20)

nanyue 2024-12-24 14:50:52 技术文章 3 ℃

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设计数据管理系统的基础,是用户开发数据管理系统的入口和控制中枢。

    Tags:

    最近发表
    标签列表