excel_vba_编程教程(完整版)-第68章
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
1。 在旋转按钮上单击右键,并选择快捷菜单上的查看代码
2。 输入过程spPercent_Change过程,如下所示:
Private Sub spPercent_Change()
txtPercent。Value = spPercent。Value
End Sub
使用旋转按钮将会导致文字框数值增加或减少。
3。 输入下述过程txtPercent_Change:
Private Sub txtPercent_Change()
Dim entry As String
On Error Resume Next
entry = Me。txtPercent。Value
If entry 》 100 Then
entry = 0
Me。txtPercent。Value = entry
End If
spPercent。Value = txtPercent。Value
End Sub
过程txtPercent_Change确保只有从0到100之间的数值可以输入在文字框里,该过程使用了On
Error Resume Next语句来忽略错误数据的输入。如果用户输入了一个非数字数据(或者大于100
的数字),VB将会将文字框的值重新设置为0。每次点击旋转按钮,文字框里的数字将会增加或
者减少1。
33。编写过程关闭用户窗体
显示窗体之后,用户可能需要通过按Esc键或者点击Cancel按钮来取消窗体,可以准备一个使用Hide
方法的简单过程,让窗体从屏幕上消失。
1。 双击Cancel按钮,并且输入下述过程cmdCancel_Click:
Private Sub butCancel_Click()
Me。Hide
End Sub
204
… 页面 221…
方法Hide将对象隐藏,但是不从内存里清除它。这样,当用户看不到窗体的时候,你的VBA过程
仍然可以在屏幕后面使用该窗体的对象和属性。使用Unload方法可以将窗体从屏幕上卸退并且
从内存里清除:
Unload Me
当窗体卸退后,所有相关的内存都会被收回,用户不能再和窗体相互交流了,窗体的对象也不能为
你的VBA过程访问了,除非使用Load语句再将窗体放置于内存里。
34。转移窗体数据到工作表
当用户点击OK按钮,窗体的选择应该写入工作表中,用户就可以通过点击Cancel按钮随时退出窗体。
1。 双击OK按钮,并输入过程cmdOK_Click,如下所示:
Private Sub butOK_Click()
Me。Hide
r = ApplicationuntA(Range(〃A:A〃))
Range(〃A1〃)。Offset(r + 1; 0) = Me。lboxSystems。Value
If Me。optHard。Value = True Then
Range(〃A1〃)。Offset(r + 1; 1) = 〃*〃
End If
If Me。optSoft。Value = True Then
Range(〃A1〃)。Offset(r + 1; 2) = 〃*〃
End If
If Me。chkIBM。Value = True Then
Range(〃A1〃)。Offset(r + 1; 3) = 〃*〃
End If
If Me。chkNote。Value = True Then
Range(〃A1〃)。Offset(r + 1; 4) = 〃*〃
End If
If Me。chkMac。Value = True Then
Range(〃A1〃)。Offset(r + 1; 5) = 〃*〃
End If
Range(〃A1〃)。Offset(r + 1; 6) = Me。cboxWhereUsed。Value
Range(〃A1〃)。Offset(r + 1; 7) = Me。txtPercent。Value
If Me。optMale。Value = True Then
Range(〃A1〃)。Offset(r + 1; 8) = 〃*〃
End If
If Me。optFemale。Value = True Then
Range(〃A1〃)。Offset(r + 1; 9) = 〃*〃
End If
Unload Me
End Sub
过程butOK_Click以隐藏用户窗体开始。语句:
r = ApplicationuntA(Range(〃A:A〃))
使用了VB函数CountA来计算A列里含有数据的单元格数目,函数的结果被赋予变量r。下一句:
Range(〃A1〃)。Offset(r + 1; 0) = Me。lboxSystems。Value
将列表框选择的项目输入到A列最后一个使用了的单元格的下面一个单元格(r+1)。接下来,是好
几条条件语句。第一条告诉VB,当Hardware选项按钮被选中时,在B列适当的单元格里输入一个星
号。B列位于A列的右边一列,因此,在Offset方法第二个参数的位置为1。第二条If语句,当用户
选择Software选项按钮的话,就在C列输入星号。类似的指令记录复选框的实际数值。在G列,将会
输入Where Used复合框里所选的项目。H列显示Percent (%) Used 文字框里的数字,而I列和J列则
分别显示提高调查人员的性别。
205
… 页面 222…
35。使用 Info Survey 应用程序
现在,你的应用程序已经准备好做最后测试了。
1。 切换到Excel界面,Info Survey工作表,并且点击Survey按钮
2。 当窗体出现时,选择适当的选项,并点击OK
3。 激活窗体几次,每次选择不同的选项
4。 保存Chap10。xls变化
36。应用程序示例 2:学生和考试
近年来,许多Windows应用软件越来越依赖于那些将各种控件组合在一起的对话框。“选项”对话框
就是很好的例子,使用Tab页,你可以给一个对话框里的很多控件提高设置。用Tab页组合的对话框
非常容易和方便使用。当给更高级的VBA应用程序设计自定义窗体时,你可以利用工具箱里可用的
两种特殊的Tab控件:多页控件和TabStrip控件。应用程序示例2,本章剩下的主题,使用这些和其
它的高级控件(例如RefEdit和Calendar)来追踪学生和他们的考试分数。
37。使用多页和 TabStrip 控件
图10…16所示的自定义窗体中间的对象是一个多页控件,它由两页组成。第一页含有文字框和复合
框来收集学生信息,例如社会保险号码(SSN:Social Security Number),名和姓,学习年限和专
业。窗体上部有一组选项按钮,让你明确学生状况:New或者Active。如果该学生的数据还没有输
入到工作表中,那么该学生的状况就是New。当窗体第一次启动时,New选项按钮就会自动被选上。
当你想要回顾或者更新已有学生的数据时,点击Active选项按钮将会显示RefEdit控件,用来使用
学生姓名填充列表框控件,如同工作表中的一样。
1。 在当前工程里插入一个新用户窗体,并重命名为Students
2。 将窗体的Caption属性改为Students and Exams
3。 点击工具箱上的多页控件,然后点击窗体的左上方并拖曳鼠标到窗体右下角
4。 右键单击Page1页,并且选择快捷菜单上的“重命名”,在“题注”文字框里面输入Students,
并在“加速键”区域输入S。用同样的方法,重命名第二页Exams,以及输入加速键X
5。 点击Students页,使用工具箱上的控件,在Students页上添加如图10…16所示的所有控件。按照
下述指南:
1。 框架Status包含两个选项按钮,设置它们的Caption属性为New和Active,再将它们的Name属性
设置为optNew和optActive
2。 使用标签标示的文字框,标签的Caption属性分别为SSN,Last Name和First Name。更改文字框
的Name属性为txtSSN,txtLast和txtFirst
3。 标示复合框的标签Caption属性设置为Year和Major。复合框的Name属性设置为cboxYear和
cboxMajor。要让用户只能选择一个选项的话,可以给每个复合框的下述属性:MatchRequired
为True,MatchEntry为1…fmMatchEntryplete
4。 在RefEdit控件上面放置标签Name Range。设置RefEdit控件的Name属性为refNames
5。 设置列表框的Name属性为lboxStudents,设置ColumnCount属性为2,来显示两列数据
6。 设置命令按钮的Caption属性为OK和Cancel,并且设置它们的Name属性为cmdOK和cmdCancel
206
… 页面 223…
图10…16 多页控件可以包含两页或者多页,每页显示不同的控件
多页控件的第二页(图10…17)用来记录和显示与考试相关的信息。该页包含两个对象。标签控件
临时标题为“Last,First”,在运行的时候,该标签将显示前一页选定学生的姓名。该页上的第二
个控件是TabStrip控件,它包含了四个tab页,是四门功课考试。尽管在本练习中,页显示在控件
的上部,但是,VB同样也允许你将tab的方位设置在底部,左边或者右边。当你从一页翻到另一页
时,你可以看到这些相同的控件,只是每个控件显示的数据改变了。
1。 点击多页控件上的Exams页
2。 点击工具箱上的标签控件,并点击Exams页的左上角,拖曳鼠标画一个足够放下人姓名的长方形
3。 在属性窗口,设置该标签的Name属性为lblWho,Caption属性为“Last; First”,设置Font属性
为Arial,Bold和14磅
4。 点击工具箱上的TabStrip控件,在紧接标签控件的下面点击,并拖曳鼠标直到达到你想要的大
小和形状(参见图10…17)。默认地,TabStrip控件将会显示两页:Tab1和Tab2。要添加新的tab
页,首先要点击TabStrip控件内部以选择该对象,再次点击,直到TabStrip控件周围的虚框显
示为粗体(或者看到页头有虚线包围),单击右键,并选择快捷菜单上的新建页,VB就会添加Tab3,
使用相同的方法添加Tab4。在每页上单击右键,并且选择快捷菜单上的重命名,参见图10…17,
给每页设置名称。注意,每页的名称有一个带下划线,它允许用户从键盘访问该页,例如按下
Alt+E将激活English页。
5。 点击English页,并开始画下述控件:
* 如果工具箱上只有题为控件的一页的话,那么回到本章的前面标题为“创建用户窗体的工
具”的部分,找到如何添加Calendar控件到工具箱上。然后将Calendar控件放置到TabStrip
里,如图10…17所示。设置Calendar控件的ShowDateSelectors属性为True。
* 添加Enter/Change Grade标签和一复合框,设置复合框的Name属性为cboxGrade
* 添加两个标签,Caption属性设置为Grade和Date,(另外两个标签的)Name属性设置为
lblGrade和lblDate。更改这两个标签的SpecialEffect属性为3…fmSpecialEffectEtched
技巧10…6 设置TabStrip控件
设置TabStrip控件的最好方法是先添加它本身,然后放置其它的控件在里面。然而,如果已经有了