靠谱电子书 > 经管其他电子书 > excel_vba_编程教程(完整版) >

第61部分

excel_vba_编程教程(完整版)-第61部分

小说: excel_vba_编程教程(完整版) 字数: 每页4000字

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!



就是很好的例子,使用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控件的最好方法是先添加它本身,然后放置其它的控件在里面。然而,如果已经有了 
控件在那里,那么你可以在它们上面画TabStrip控件,然后使用“移至底层”命令,将TabStrip 
控件放到Z…顺序的底层。  

                                                                                              
图10…17 外面的框架包含一个多页控件,而里面的框架则包含TabStrip控件  
Students and Exams自定义窗体允许你输入新数据,或者显示数据,就像在工作表里一样。图10…18 
显示了本窗体使用的工作表。  
1。 准备如图10…18所示的工作表  
2。 在工作表里添加按钮Display Form,并且给他指定宏DoStudents  
3。 在VB编辑器屏幕,在当前工程里添加新模块,并设置模块的Name属性为InfoStudents  
4。 在InfoStudents模块里输入下述过程DoStudents:  
    Sub DoStudents()   
         Students。Show   
    End Sub   

                                           207 

… 页面 224…

                                                                                                   
图10…18 Students and Exams应用程序的协助工作表  
5。 返回到工作表,并点击按钮Display Form,测试DoStudents过程  
6。 点击窗体右上角的关闭按钮,关闭窗体  

38。给窗体 Students and Exams 自定义窗体编写 VBA 过程  

自定义窗体Students and Exams包含很多VBA过程,显示在下面。这些过程的代码必须输入在窗体 
模块里面,双击窗体背景,激活窗体模块。  
1。 从代码窗口左上角的复合框里选择“(通用)”。右边的过程选择复合框应该显示“(声明)”,输 
    入下述变量声明:  
    'Declarations   
    Dim r As Integer   
    Dim nr As Integer   
    Dim indexPlus As Integer   
    Dim YesNo As Integer   
2。 输入过程UserForm_Initialize代码,初始化窗体  
    Private Sub UserForm_Initialize()   
          'select first page of the MultiPage control 选择多页控件的第一页  
          'page numbering begins from zero (0) 页码编号从0开始  
         Me。MultiPage1。Value = 0   
          'choose the New option button 选择New选项按钮  
         optNew。Value = True   
          'hide three controls on startup 启动时先隐藏三个控件  
          lblNames。Visible = False ‘前面应该将标签Name Range命名为lblNames(原文为 
          lblLast)  
         refNames。Visible = False   
          lboxStudents。Visible = False   
          'populate the Year bo box 填充Year复合框  
         With Me。cboxYear   
               。AddItem 〃1〃   
               。AddItem 〃2〃   
               。AddItem 〃3〃   
               。AddItem 〃4〃   
         End With   
          ' populate the Major bo box 填充Major复合框  
         With Me。cboxMajor   
               。AddItem 〃English〃   
               。AddItem 〃Chemistry〃   
               。AddItem 〃Mathematics〃   
               。AddItem 〃Linguistics〃   
               。AddItem 〃puter Science〃   
         End With   
          ' populate a bo box with grades 填充得分复合框  
         With Me。cboxGrade   

                                            208 

… 页面 225…

               。AddItem 〃A〃   
               。AddItem 〃B〃   
               。AddItem 〃C〃   
               。AddItem 〃D〃   
               。AddItem 〃F〃   
         End With   
         'display date in the lblDate label control 在lblDate标签里显示日期  
         Me。lblDate。Caption = Me。Calendar1。Value   
         'activate the first tab in the TabStrip control 激活TabStrip控件的第一页  
         Me。TabStrip1。Value = 0   
         'activate the SSN text box 激活SSN文字框  
         Me。txtSSN。SetFocus   
   End Sub  
3。 输入两个过程来控制选项按钮(optNew_Click和optActive_Click)  
   Private Sub optNew_Click()   
         lblNames。Visible = False   
         refNames。Visible = False   
         lboxStudents。Visible = False   
         Me。MultiPage1(1)。Enabled = False   
         If lboxStudents。RowSource 《 》 〃〃 Then   
              Me。txtSSN。Text = 〃〃   
              Me。txtLast。Text = 〃〃   
              Me。txtFirst。Text = 〃〃   
              Me。cboxYear。Text = 〃〃   
              Me。cboxMajor。Text = 〃〃   
              Me。txtSSN。SetFocus   
         End If   
         Me。txtSSN。SetFocus   
   End Sub   
   Private Sub optActive_Click()   
         lblNames。Visible = True   
         refNames。Visible = True   
         refNames。SetFocus   
         If lboxStudents。RowSource 《 》 〃〃 Then   
               lboxStudents。Visible = True   
              Call lboxStudents_Change   
         End If   
   End Sub   
4。 输入过程lboxStudents_Change和refNames_Change的代码,这些控制Students页上面的RefEdit 
   和列表框控件:  
   Private Sub lboxStudents_Change()   
         indexPlus = lboxStudents。ListIndex + 3   
         With ActiveWorkbook。Worksheets(〃Sheet2〃)   
              Me。txtSSN。Text = Range(〃A〃 & indexPlus)。Value   
              Me。txtLast。Text = Range(〃B〃 & indexPlus)。Value   
              Me。txtFirst。Text = Range(〃C〃 & indexPlus)。Value   
              Me。cboxYear。Text = Range(〃D〃 & indexPlus)。Value   
              Me。cboxMajor。Text = Range(〃E〃 & indexPlus)。Value   
              Call TabStrip1_Change   
              Me。MultiPage1(1)。Enabled = True   

                                          209 

… 页面 226…

         End With   
   End Sub   
   Private Sub refNames_Change()   
         lboxStudents。RowSource = refNames。Value   
         lboxStudents。ListIndex = 

返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的