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

下载本书

添加书签

excel_vba_编程教程(完整版)- 第69节


按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
设置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   
         lboxStudents。Visible = True   
         Call lboxStudents_Change   
   End Sub   
5。 输入代码来控制命令按钮OK(cmdOK_Click)和Cancel(cmdCancel_Click):  
   Private Sub cmdOK_Click()   
         If Me。optNew。Value = True Then   
              Me。Hide   
              ActiveWorkbook。Sheets(〃Sheet2〃)。Select   
              r = ActiveSheet。UsedRange。Rowsunt   
              nr = r + 1   
              Range(〃A〃 & nr)。Value = Me。txtSSN。Text   
              Range(〃B〃 & nr)。Value = Me。txtLast。Text   
              Range(〃C〃 & nr)。Value = Me。txtFirst。Text   
              Range(〃D〃 & nr)。Value = Me。cboxYear。Text   
              Range(〃E〃 & nr)。Value = Me。cboxMajor。Text   
              Me。txtSSN。Text = 〃〃   
              Me。txtLast。Text = 〃〃   
              Me。txtFirst。Text = 〃〃   
              Me。cboxYear。Text = 〃〃   
              Me。cboxMajor。Text = 〃〃   
              Me。txtSSN。SetFocus   
              'redisplay the form   
              Me。Show   
         Else   
              MsgBox 〃This control is currently unavailable。〃   
         End If   
   End Sub   
   Private Sub cmdCancel_Click()   
         Unload Me   
         Set Students = Nothing   
   End Sub   
6。 输入过程cboxGrade_Click来控制位于Exams页上的Grade复合框:  
   Private Sub cboxGrade_Click()   
         YesNo = MsgBox(〃Enter the grade in the worksheet?〃; _   
              vbYesNo; 〃Modify Grade〃)   
         If YesNo = 6 Then   
              Me。lblGrade。Caption = cboxGrade。Value   
              Select Case TabStrip1。Value   
                    Case 0   
                         Range(〃F〃 & indexPlus)。Value = Me。lblGrade。Caption   
                    Case 1   
                         Range(〃H〃 & indexPlus)。Value = Me。lblGrade。Caption   
                    Case 2   
                         Range(〃J〃 & indexPlus)。Value = Me。lblGrade。Caption   
                    Case 3   

                                          210 

… 页面 227…

                         Range(〃L〃 & indexPlus)。Value = Me。lblGrade。Caption   
                    End Select   
              cboxGrade。Value = 〃〃   
         End If   
   End Sub   
7。 输入过程Calendar1_Click,如下所示:  
   Private Sub Calendar1_Click()   
         YesNo = MsgBox(〃Enter the date in the worksheet?〃; vbYesNo; _   
           〃Modify Date〃)   
         If YesNo = 6 Then   
              Me。lblDate。Caption = Calendar1。Value   
              Select Case TabStrip1。Value   
                    Case 0   
                         Range(〃G〃 & indexPlus)。Value = Me。lblDate。Caption   
                    Case 1   
                         Range(〃I〃 & indexPlus)。Value = Me。lblDate。Caption   
                    Case 2   
                         Range(〃K〃 & indexPlus)。Value = Me。lblDate。Caption   
                    Case 3   
                         Range(〃M〃 & indexPlus)。Value = Me。lblDate。Caption   
              End Select   
         End If   
   End Sub   
8。 输入过程TabSt
小提示:按 回车 [Enter] 键 返回书目,按 ← 键 返回上一页, 按 → 键 进入下一页。 赞一下 添加书签加入书架