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

第67部分

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

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

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




                                                                            
图11…7 当VB运行过程遇到断点时,它会切换到代码窗口,并在中断过程的语句的左边边框上显示 
一个黄色箭头  

                                          230 

… 页面 247…

7。  通过按F8逐句运行代码,VB运行当前语句,并且自动向前移动到下一句然后停止执行。当前语 
    句的边框上显示了黄色箭头,并且为黄色底色。不断地按F8逐句执行该过程。当VB遇到With emp 
    语句时,它会切换到过程Class_Initialize。  

                                                                               
图11…8 当VB遇到对对象emp的引用的时候,它就会出去执行过程Class_Initialize。在它执行完该 
过程里的语句之后,VBA会返回到过程cmdSave_Click里面。  
当VB遇到语句Cells(Index; 1)。Formula = emp。ID时,它就会出去执行类模块CEmployee里的过程 
Property Get Id。  

                                                                               
图11…9 对自定义对象属性的读取要通过过程Property Get来实现。  
8。  使用F8键,追踪过程cmdSave_Click的执行,直到结束。  
    当VBA遇到过程的结束(End Sub)时,黄色加亮将会关闭。这时候,点击屏幕下面的视窗任务 
    栏上的Excel按钮返回到当前窗体。输入一个新员工的数据,然后点击按钮Save。当VB显示代 
    码窗口时,选择“调试”|“清除所有断点”。现在按F5运行完剩余的代码。  
技巧11…6 VBA调试工具  
VB提供了许多调试工具,帮助你分析你的应用程序如何操作,以及找到你过程里的错误源。参见第 
十三章这些工具的使用。  

16。接下来……  

在本章里,你学习了在VBA过程里如何创建和使用你自己的对象和集合。你使用了类模块来创建一 
个用户定义(自定义)对象。你已经看到了如何使用Property Get和Property Let过程定义你的自 
定义对象的属性。你也学习了如何给你的自定义对象编写方法,再有,你看到了如何通过创建一个 
自定义窗体使得类模块为用户可用。最后,你学习了如何通过逐句执行代码来分析你的VBA程序。 
在下一章,你将学习如何通过自定义菜单和工具条让你的VBA程序为终端用户所用。  

                        第十二章 使用 VBA 创建自定义菜单和工具栏  

注意,使用中文版的用户需要将相应的代码作一定的修改。下面列出了中文版的工作表菜单栏标题  
文件(&F) 编辑(&E) 视图(&V) 插入(&I) 格式(&O) 工具(&T) 数据(&D) 窗口(&W) 帮助(&H)  

                                          231 

… 页面 248…

用户肯定期望在任何Windows应用程序里有一个方便的方法来选择命令和选项,因此,当你对某个 
工作表自动化编写完VBA程序时,你还应该花些时间添加一些功能,让你的应用程序更加使用方便 
和快捷。用户界面最为期望的功能就是自定义菜单和工具栏,当你的VBA程序包含很多个过程时这 
尤为重要。简单地在内置菜单或者自定义工具栏上创建一个控件,就可以对某个命令提供一个快捷 
访问。 本章将教你如何编程使用菜单和工具栏。  

1。工具栏  

术语“工具栏”既指工具栏又指菜单栏,工具栏给用户提供了对应用程序命令的快捷方便的访问。 
可以通过自定义对话框(参见图12…1)轻松才创建和修改工具栏。访问该对话框的方法之一是选择 
 “工具”|“自定义”,你也可以选择“视图”|“工具栏”|“自定义”,或者在工具栏的任意位置 
单击右键,然后从快捷菜单上选择“自定义”。工具栏可以包括按钮,菜单,或者两者都有。菜单 
栏位于应用程序窗口的顶部(紧挨着它的标题栏),它是一种特殊的工具栏。除了命令之外,菜单 
栏也可以包含图片,允许用户很快将命令和工具栏上相应的按钮联系起来。例如,“文件”菜单里 
的“新建”和“打开”,在该命令的左边显示了图片,这些相同的图片也可以在Excel“常用”工具 
栏里面找到。  

                                                           
图12…1 使用自定义对话框,可以手动自定义菜单和工具栏  
自定义对话框包含三页:工具栏,命令和选项。使用工具栏页,你可以创建一个新工具栏、更改现 
有工具栏的名称、清除工具栏或者重新设置工具栏。命令页允许你将新的命令拖曳到活动菜单里或 
者任何可见的工具栏。点击某个类别后,你可以看到它里面可用的命令清单。选项页让你通过设置 
图标大小,显示关于工具栏的屏幕提示以及选择动画,来设置你个性化的菜单和工具栏。如果你需 
要重新看一下如何通过对话框操作菜单和工具栏的话,可以看看在线帮助。本章侧重于VBA语句和 
过程,以获取对应用程序的菜单和工具栏的完全控制。  
使用对象mandBar  
mandBars是对象集合,代表当前应用程序里的所有工具栏。该集合里的每个对象称为 
mandBar。术语“mandBar”用来代表菜单栏、快捷菜单或者工具栏。因为mandBar对象可 
以代表各种工具(工具栏,菜单栏,快捷菜单),所以该对象有个专门的属性Type,可以用来返回 
工具栏的特定类型,如表12…1所示。  
表12…1 集合mandBars里的mandBar对象类型  
对象类型                索引           常量  
工具栏                  0             msoBarTypeNormal  
菜单栏                  1             msoBarTypeMenuBar  
快捷菜单                2             msoBarTypePopup  
  
1。 打开一新工作簿并保存为Chap12。xls  
2。 切换到VB编辑器屏幕  
3。 选择当前VBA工程Chap12。xls ,并重命名为CustomTools  
4。 添加一个新模块  
5。 输入过程MyToolBars,如下所示:  
                                          232 

… 页面 249…

    Sub MyToolBars( )   
         Dim bar As mandBar   
         Dim r As Integer   
         r = 1   
         ActiveSheet。Range(“A1”)。Formula = “List of Toolbars”   
         For Each bar In mandBars   
               If bar。Type = msoBarTypeNormal Then   
                    With Worksheets(〃Sheet1〃)。Range(〃A1〃)   
                          。Offset(r; 0) = bar。Name   
                          。Offset(r; 1) = bar。Index   
                    End With   
                    r = r + 1   
               End If   
         Next   
         Set bar = Nothing   
    End Sub   
上面的过程在集合mandBars里面搜索工具,并且只选择Type属性为msoBarTypeNormal的工具。 
如果集合mandBars里面的某个成员是工具栏的话,那么VB就会将它的名称输入到活动工作表的 
第一列,B列将保存该对象的索引号。   
修改上面的过程,让它输入集合mandBars里所有对象(工具栏,菜单栏,快捷菜单)的名称到 
工作表中去,使用表12…1作为参考。  
可以使用工具栏的名称或者索引号来引用mandBars集合里的某个特定的工具栏。  
1。  在立即窗口里输入下述语句:  
    ?mandBars(1)。Name   
当你按下回车键后,VB就会返回mandBars集合里的第一个成员的名称。  
2。  在立即窗口输入下述语句:  
    ?mandBars(〃Circular Reference〃)。Type   
VB返回0,这是工具栏的索引号码(参见表12…1)  
3。  要计算mandBars集合里可用工具的总数,可以使用Count属性。在立即窗口里输入下述语句:  
    ?mandBarsunt   

2。创建自定义工具栏  

要创建自定义工具栏、菜单栏或者快捷菜单,可以使用mandBars对象的Add方法。  
假设你想要创建一个叫做“Budget Plans”的新工具栏,你要调用的Add方法如下所示:  
mandBars。Add(Name; Position; MenuBar; Temporary)   
可选参数Name是你想要分配给你的新命令条的名称,如果你不明确该名称,VB会分配一个普通名称, 
例如“自定义 1”。Position参数决定新命令条将出现在屏幕的哪里(参见表12…2)。  
表12…2 mandBar对象的位置常量  
位置常量             索引           描述  
msoBarLeft           0              命令栏位于应用程序窗口的左边  
msoBarRight          2              命令栏位于应用程序窗口的右边  
msoBarTop            1              命令栏位于应用程序窗口的上面  
msoBarBottom         3              命令栏位于应用程序窗口的底部  
msoBarFloating       4              命令栏浮在屏幕上  
msoBarPopup          5              快捷菜单  
msoBarMenuBar        6              命令栏取代系统菜单(仅用于Macintosh)  
  
参数MenuBar是个逻辑值(True或False),它决定新命令条是否取代活动菜单条。如果你想要取代 
活动菜单条的话,就输入True,否则使用False。参数Temporary是逻辑值(True或False),决定何 
时删除命令条。使用True,当Excel程序关闭的时候命令条就会自动删除。使用False的话,当你退 

                                           233 

… 页面 250…

出该程序的时候,该工具栏不会被删除。  
你可以在立即窗口里试验创建工具栏。  
1。  在立即窗口里面输入下述语句,注意要将完整的语句书写在一行:  
    set newToolbar = mandBars。Add(〃Budget Plans〃; msoBarRight; False; True)   
    当你按下回车键时,VB就会在集合mandBars里面添加一个新的工具栏,具体名称为“Budget  
    Plans”。切换到Excel应用软件窗口并且选择“视图”|“工具栏”,你可以看到Excel显示的一 
    列可用工具栏清单,包括你刚才创建的那个(参见图12…2)。  

                                                                        
图12…2 你在Excel内置工具栏清单里面添加了一个自定义工具栏  
2。  切换回VB编辑器窗口,并在立即窗口里输入下述语句:  
    mandBars(〃Budget Plans〃)。Visible = True  
    切换到Excel应用程序窗口查看该工具栏,工具栏“Budget Plans”出现在垂直滚动条的右边。 
    还记得你创建该工具栏的时候吗?你使用的是常量msoBarRight来决定其位置。  
3。  现在关闭Excel应用软件,重新打开它并且查看工具栏Budget Plans是否依然出现在应用软件 
    窗口的右边。  
    因为你在Add方法最后一个参数的位置使用了逻辑值True,工具栏Budget Plans应该已经不在 
    了。  
有个好主意,在你试图创建新工具栏之前,需要检查某个特定名称的工具栏是否已经存在于集合 
mandBars里了。下述过程将创建工具栏“Budget Plans”,倘若不存在具有该相同名称的工具栏 
的话。在工程CustomTools (Chap12。xls)的代码窗口里面输入该过程,并且运行两次。第二次执行 
该过程的时候,你将看到一信息,提醒你已经有了这样一个工具栏。  
Sub MakeToolBar()   
     Dim bar As mandBar   
     Dim flagExists As Boolean   
     flagExists = False   

                                          234 

… 页面 251…

     For Each bar In mandBars   
          If bar。Name = 〃Budget Plans〃 Then   
              flagExists = True   
              MsgBox 〃The toolbar with this name already exists。〃   
              Exit For   
         End If   
     Next bar   
     If Not flagExists Then   
         Set bar = mandBars。Add(〃Budget Plans〃; _   
           msoBarBottom; False; True)   
         mandBars(〃Budget Plans〃)。Visible = True   

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

你可能喜欢的