《excel_vba_编程教程(完整版)》

下载本书

添加书签

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控件的最好方法是先添加它本身,然后放置其它的控件在里面。然而,如果已经有了 
小提示:按 回车 [Enter] 键 返回书目,按 ← 键 返回上一页, 按 → 键 进入下一页。 赞一下 添加书签加入书架