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

下载本书

添加书签

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


按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
活的代码窗口。注意,Microsoft Visual Basic标题栏显示的标题:Chap10。xls – 'UserForm1(代 
码)'。窗体模块包含一个“通用”部分,也包含放置于窗体上面的每个控件的部分。通用部分用来 
声明窗体变量或者常量。  
你可以通过点击右上角复合框右边的向下箭头来进入预期的部分。该复合框被称为过程框,它显示 
左手边复合框显示控件可以识别的所有事件过程。已经编写了过程的事件显示为粗体。  

                                                                                   
图10…15 过程框列出了命令按钮控件可用的事件过程  

28。编写 VBA 过程对窗体和控件事件反应  

在用户能够使用自定义窗体完成特殊任务之前,你通常必须编写一些VBA过程。正如前面提及的, 
VB编辑器创建的每个窗体都有一个模块以储存该窗体使用的过程。  
在显示自定义窗体之前,你可以需要设置控件的初始值。编写一个Initialize事件过程,可以给控 
件设置初始值,或者说默认值,每次显示窗体的时候控件都会拥有这些值。  
Initialize事件发生在窗体启动时,但是在它显示在屏幕之前。假设你想要Info Survey窗体显示 
以下初始设置:  
1。 在Main Interest框架里,选择了Hardware按钮  
2。 下面的列表框包含了对应Hardware选项按钮的内容  
3。 puter Type复选框里没有一个复选框是被选中的  
4。 标签Where Used下面复合框显示第一条可用的项目,并且用户不能给该复合框添加项目  
5。 在旋转按钮旁边的文字框显示初始值(0)  
6。  图像控件显示与Hardware或Software选项按钮相关的图片  

29。编写过程来初始化窗体  

1。 在工程浏览器窗口,双击InfoSurvey窗体  
2。 双击窗体背景,打开活动窗体的代码窗口。  
    当你双击窗体或控件的时候,代码窗口会自动打开并且该被点击的窗体或者控件的Click事件就 
会出现以编辑。  
    在过程定义(图10…15)时,VB自动在关键字Sub之前添加Private。私有过程只能从当前窗体模 
    块里调用,换句话说,在当前工程的其它模块里的过程不能调用该私有过程。在代码窗口的顶 
    端,有两个复合框,左边的复合框显示所有的窗体对象;右边的复合框则显示所选控件能够识 
    别的所有事件。  
3。 点击过程框的向下箭头,并且选择Initialize事件,VB将显示UserForm_Initialize过程在代码 
                                          201 

… 页面 218…

    窗口:  
   Private Sub UserForm_Initialize()   
   End Sub   
4。 在关键字Private Sub和End Sub之间输入窗体的初始设置,完整的UserForm_Initialize过程如 
   下所示:  
   Private Sub UserForm_Initialize()   
         'select the Hardware option 选择Hardware选项  
         optHard。Value = True   
         'turn off the Software option and all the check boxes 关闭Software选项和所有 
         复选框  
         optSoft。Value = False   
         chkIBM。Value = False   
         chkNote。Value = False   
         chkMac。Value = False   
         'display a zero in the text box 文字框显示0  
         txtPercent。Value = 0   
         'call the procedure to populate the list box with   
         'hardware options 调用过程用硬件选项来填充列表框  
         Call ListHardware   
         'populate the bo box 添加复合框项目  
         With Me。cboxWhereUsed   
              。AddItem 〃home〃   
              。AddItem 〃work〃   
              。AddItem 〃school〃   
              。AddItem 〃work/home〃   
              。AddItem 〃home/school〃   
              。AddItem 〃work/home/school”   
         End With   
         'select the first element in the bo box 选择复合框第一个项目  
         Me。cboxWhereUsed。ListIndex = 0   
         'select the first element in the list box 选择列表框的第一个项目  
         Me。lboxSystems。ListIndex = 0   
         'load a picture file for the Hardware option 上载Hardware选项的图片文件  
         Me。picImage。Picture = LoadPicture(〃C:cd。bmp〃)   
   End Sub   
   你可以使用关键字Me代替窗体的实际名称来简化事件过程代码,例如,除了使用语句:  
    InfoSurvey。cboxWhereUsed。ListIndex = 0   
   之外,你也可以使用下面的语句,节约打字时间:  
   Me。cboxWhereUsed。ListIndex = 0   
   特别是当窗体名称很长时,这种技术很有用。注意,列表框的第一个成员的索引号为0,因此, 
   如果想要选择列表里的第二个项目的话,你就必须设置其ListIndex属性为1。  
   该过程结束时给图像控件上载图片,请确保该指定的图片文件可以在指定的文件夹里找到。如 
   果你没有该文件,那么输入你想显示的图片文件的完整路径。  
   过程UserForm_Initialize调用外部过程(ListHardware)用硬件成员来填充它的列表框控件。  
5。 激活ShowSurvey模块并且输入过程ListHardware,如下所示:  
   Sub ListHardware()   
         With InfoSurvey。lboxSystems   
              。AddItem 〃CD…ROM Drive〃   
              。AddItem 〃Printer〃   
              。AddItem 〃Fax〃   

                                         202 

… 页面 219…

               。AddItem 〃Network〃   
               。AddItem 〃Joystick〃   
               。AddItem 〃Sound Card〃   
               。AddItem 〃Graphics Card〃   
               。AddItem 〃Modem〃   
               。AddItem 〃Monitor〃   
               。AddItem 〃Mouse〃   
               。AddItem 〃Zip Drive〃   
               。AddItem 〃Scanner〃   
         End With   
    End Sub   
    既然你已经准备好了UserForm_Initialize过程和ListHardware过程,那么你可以运行窗体查看 
    结果了。  
6。 在工作表Info Survey,使用Survey按钮来启动窗体,窗体显示后,用户选择合适的选项或者点 
    击Cancel按钮。当用户点击Software选项按钮时,下面的列表框应该显示不同的项目,同时, 
    图像控件应该上载一个不同的图片。下一节将解释如何编写这些事件。  

30。编写过程填充列表框控件  

在前面的部分,你准备了ListHardware过程用Hardware成员来填充lboxSystems列表框,你可以使 
用同样的方法将Software项目上载到该列表框。  
1。 激活ShowSurvey模块,并输入过程ListSoftware代码,如下所示:  
    Sub ListSoftware()   
         With InfoSurvey。lboxSystems   
               。AddItem 〃Spreadsheets〃   
               。AddItem 〃Databases〃   
               。AddItem 〃CAD Systems〃   
               。AddItem 〃Word Processing〃   
               。AddItem 〃Finance Programs〃   
               。AddItem 〃Games〃   
               。AddItem 〃Accounting Programs〃   
               。AddItem 〃Desktop Publishing〃   
               。AddItem 〃Imaging Software〃   
               。AddItem 〃Personal Information Managers〃   
         End With   
    End Sub   

31。编写过程控制选项按钮  

1。 激活窗体InfoSurvey,并双击位于Main Interest框架里的Software选项按钮  
2。  当代码窗口出现optSoft_Click过程构架的时候,选中该代码并按下Delete键  
3。 点击右上角的复合框向下箭头,并且选择Change事件过程,VB将会自动为你输入optSoft_Change 
    过程的开头和结尾  
4。 输入optSoft_Change过程代码,显示如下:  
    Private Sub optSoft_Change()   
         Me。lboxSystems。Clear   
         Call ListSoftware   
         Me。lboxSystems。ListIndex = 0   
         Me。picImage。Picture = LoadPicture(〃C:Books。bmp〃)   
    End Sub   
    过程optSoft_Change开始时,使用Clear方法将列表框lboxSystems的当前成员列表清除,下一 
    条语句调用ListSoftware过程用软件成员来填充列表框,换句话说,当用户点击Software按钮 
    时,程序将硬件成员清除然后添加软件成员。如果你在添加新成员之前,不清除列表框的话, 
                                          203 

… 页面 220…

    这些新成员就会附加在当前清单后面。语句Me。lboxSystems。ListIndex = 0选择列表里的第一 
    条成员。该过程里的最后一条语句为图像控件上载图片文件,请确保换上你电脑里有效图片的 
    完整路径。  
    因为用户在选择Software按钮之后,还可能要重新选择Hardware按钮,所以,你必须给optHard 
    选项按钮创建一个类似的Change事件过程。  
5。 在optSoft_Change过程下面,输入下述过程optHard_Change:  
   Private Sub optHard_Change()   
         Me。lboxSystems。Clear   
         Call ListHardware   
         Me。lboxSystems。ListIndex = 0   
         Me。picImage。Picture = LoadPicture(〃C:cd。bmp〃)   
    End Sub   
6。 点击工作表Info Survey里的按钮Survey启动窗体来查看结果。当你点击Software选项按钮时, 
    你应该看到列表框里的软件成员,同时,图像控件也应该显示了相应的图片。点击Hardware选 
    项按钮后,列表框应该显示适当的硬件成员,同时,图像控件应该显示一张不同的图片。  
7。 点击窗体右上角的关闭按钮,关闭该窗体  

32。编写过程同步文字框和旋转按钮  

Info Survey窗体在旋转按钮前面有个文字框,用户可以直接在文字框里输入或者使用旋转按钮, 
在文字框里表明Hardware或者Software成员使用的百分率。文字框的初始值为0,假设用户输入了 
10,现在要用旋转按钮将它增加到15。要激活这个动作的话,那么该文字框和旋转按钮必须得同步。 
每个对象需要有一个单独的Change事件过程。  
1。 在旋转按钮上单击右键,并选择快捷菜单上的查看代码  
2。 输入过程spPercent_Change过程,如下所示:  
   Private Sub spPercent_Change()  
         txtPercent。V
小提示:按 回车 [Enter] 键 返回书目,按 ← 键 返回上一页, 按 → 键 进入下一页。 赞一下 添加书签加入书架