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

下载本书

添加书签

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


按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
当用户右键点击窗体上按钮时,该过程就会调用过程Show_ShortMenu。点击鼠标按钮时VB会有两个 
事件过程响应。当你点击鼠标按钮时,VB会执行MouseDown事件过程,当你释放鼠标按键,MouseUp 
事件则会发生。  
MouseDown和MouseUp事件过程要求下述参数:  
*  参数object确定对象,在该例中,是窗体上面的命令按钮名称  
*  参数Button是整型数据,确定按下的是哪个鼠标按键  
     Button参数值            意义  
     1                       鼠标左键  
     2                       鼠标右键  
     3                       鼠标中键  
*  参数Shift确定当事件发生时,用户是否按住了Shift; Crel或者Alt键。  
     Shift参数值             意义  
     1                       Shift键  
     2                       Ctrl键  
     3                       Shift和Ctrl键  
     4                       Alt键  
     5                       Alt和Shift键  
     6                       Alt和Ctrl键  
     7                       Alt; Shift和Ctrl键  
5。  在当前工程模块里输入过程Show_ShortMenu代码:  
     Sub Show_ShortMenu()   
         Dim shortMenu As Object   
         Set shortMenu = ApplicationmandBars(〃Information〃)   
         With shortMenu   
               。ShowPopup   
         End With   
     End Sub   
     注意,本过程使用的方法ShowPopup没有使用决定快捷菜单屏幕显示位置的可选参数,因此, 
     菜单将出现在鼠标点击的位置(见图12…11)。  
6。  要删除名为Information的快捷菜单的话,请在代码窗口输入并且运行下述过程 
    Delete_ShortMenu:  
     Sub Delete_ShortMenu()   
         ApplicationmandBars(〃Information〃)。Delete   
     End Sub   

                                          248 

… 页面 265…

                                                  
图12…11 当你右键点击一个对象时出现的自定义快捷菜单  

13。接下来……  

在本章,你学习了如何使用VBA修改内置菜单和工具栏,如何创建和显示你自己的工具栏,菜单和 
快捷菜单。当使用菜单和工具栏时,你使用了对象mandBar的各种属性和方法。你学习了三种类 
型的对象mandBar:Normal,MenuBar和Popup。使用立即窗口,你试验了示范如何创建自己的工 
具栏和控件。  
下一章将带你进入错误捕捉和调试,换句话说,你将学习当你的程序工作不正确时,该做些什么。  

                             第十三章 调试 VBA 过程和处理错误   

错误要悄悄混入你的VBA过程很容易,事实是,无论你多么仔细,你所有的VBA过程第一次就能全部 
运行正确,这是极其少见的事。总有一些事情你错过了或者没有想到过。从第二章起,你就知道有 
三种类型的VBA错误:语法错误,逻辑错误和运行时间错误。本章将给介绍许多内置工具,你会发 
现它们在你的过程代码的分析和定位错误源的过程中是很有用的。  

1。测试 VBA 过程  

迄今为止,在本书中,你已经创建和执行了很多过程和函数例子。因为这些程序中的大多数都很短, 
所以找错误并不是非常困难。然而,当你编写更长更复杂的过程时,查找错误源就更缓慢和费时了。 
幸运的是,VBA编辑器提供了一套方便的工具,让你追踪你VBA问题的过程更简单,更快捷,有更少 
的挫折。程序缺陷是电脑程序中的错误,而调试则是定位和解决这些错误的过程。调试让你找到你 
的程序为什么不按预期工作的原因。你可以通过步入程序代码或者检查变量值来达到目的。  
使用下述指南进行你的VBA程序调试:  
*  如果你想要分析你的过程,通过按F8或者选择调试…逐语句,逐语句地执行你的代码  
*  如果你怀疑程序的某个地方有错误发生,那么可以使用断点  
*  如果你想监测程序中某个变量或者表达式的值,那么可以添加一个监视表达式  
*  如果你讨厌在冗长的程序代码中拉动滚动条到你感兴趣的部分去,那么你可以设置一个书签, 
      快速跳到需要的地方。  
每条指南在本章中都有实用的例子进行示范。  

2。终止过程  

你知道如何终止VB过程吗?如果你想到了按Esc键,那么你对了。如果你在运行程序,并且突然按 
下Esc键,那么VB就会中断程序的运行,并显示如图13…1显示的信息。然而除了Esc键,这个在很多 
情况下都很有力而且可靠的方法,VBA还提供了很多其它的方法来中断你的过程,进入所谓的中断 
模式:  
*  按Ctrl+Break  
*  设置一个或多个断点  
*  插入Stop语句  
*  添加监视表达式  
当你的程序执行被临时停止时,断点便发生了。VB会从过程的执行中记住所有变量和语句的值,当 
用户从工具栏点击运行宏(或者“运行”菜单上的相同名称),或者点击对话框(图13…1)上面的 
继续按钮,可以恢复。  

                                           249 

… 页面 266…

                                                        
图13…1 在你运行程序时,如果你按下Esc键或者Ctrl+Break键,就会出现该信息  
图13…1显示的错误对话框通知你该过程已被中断,下述按钮可用:  
                    
继续              点击该按钮可以恢复代码执行。如果遇到错误该按钮将变灰  
结束              如果你这次不想排除故障则点击该按钮,VBA将终止代码执行  
调试              点击该按钮进入中断模式。代码窗口将出现,并且VBA会加亮过程执行时停止 
                  处的代码行。你可以检查,调试,中断或者逐句执行代码。注意,当VBA工程 
                  被保护时,该按钮变灰  
帮助              点击该按钮查看在线帮助,解释该错误信息的导致原因  
  
技巧13…1 防止用户干预  
通过将下述语句加入到过程代码中去,你可以防止用户中断你的程序:  
Application。EnableCancelKey = xlDisabled  
当用户在程序运行时按下Esc或者Ctrl+Break时,不会发生任何情况。应用程序对象的属性 
EnableCancelKey禁用了这些键。  

3。使用断点  

如果你多少知道点你程序代码有问题,那么你应该在那里(给定的行)暂停代码执行。要设置断点, 
简单点就是当光标位于目标代码行时按下F9。当过程运行中VBA到达此处时,立即会显示代码窗口。 
这时,你可以通过按F8或者选择调试…逐语句来一行一行地运行代码。  
我们来看看下面一个方案,看看它是如何工作的。假设在过程ChangeCode的执行中下面的代码行会 
出问题:  
ActiveCell。Formula = 〃=VLookup(RC'1';Codes。xls!R1C1:R6C2;2)〃   
1。  准备好如图13…2和13…3所示的电子表格。保存图13…2所示的数据为Chap13。xls,图13…3所示的 
    数据为Codes。xls。关闭文件Codes。xls。  

                                                                              
    图13…2 本文件中输入在D列的编号将会在过程ChangeCode中被显示于土13…3中的编号所代替  

                                          250 

… 页面 267…

2。 
      
    图13…3 过程ChangeCode使用该编号表作查找目的  
      
3。  激活文件Chap13。xls,切换到VB编辑器窗口  
4。  使用属性窗口重新命名VBAProject(Chap13。xls)为Debugging  
5。  插入模块到Debugging (Chap13。xls)工程,并且更改名Name属性为Breaks  
6。  输入过程代码ChangeCode,如下所示:  
     Sub ChangeCode()   
         Workbooks。Open FileName:=〃C:Codes。xls〃 ‘将此处文件路径改为你的真实路径  
         Windows(〃Chap13。xls〃)。Activate   
         Columns(〃D:D〃)。Select   
         Selection。Insert Shift:=xlToRight   
         Range(〃D1〃)。Select   
         ActiveCell。Formula = 〃Code〃   
         Columns(〃D:D〃)。Select   
         Selection。SpecialCells(xlBlanks)。Select   
         ActiveCell。Formula = 〃=VLookup(RC'1';Codes。xls!R1C1:R6C2;2)〃   
         Selection。FillDown   
         With Columns(〃D:D〃)   
              。EntireColumn。AutoFit   
              。Select   
         End With   
         Selectionpy   
         Selection。PasteSpecial Paste:=xlValues   
         Rows(〃1:1〃)。Select   
         With Selection   
              。HorizontalAlignment = xlCenter   
              。VerticalAlignment = xlBottom   
              。Orientation = xlHorizontal   
         End With   
         Workbooks(〃Codes。xls〃)。Close   
     End Sub   
7。  在过程ChangeCode里,点击下述语句行的任意地方:  
    ActiveCell。Formula = 〃=VLookup(RC'1';Codes。xls!R1C1:R6C2;2)〃   
8。  按下F9(或者选择调试…切换断点)来在光标所在处设置一个断点。设置断点的另外一种方法 
    是点击你要暂停程序的代码左边的页边。同时,带断点的代码行显示为白字紫红底色(见图 
    13…4)。断点的颜色可以在选项对话框(工具菜单)的编辑器格式页上更改。  

                                         251 

… 页面 268…

                                                                                           
图13…4 设置了断点的代码行显示了选项对话框里编辑器格式设定的颜色  
9。  运行过程ChangeCode。当你运行该过程时,VB将执行所有的语句,直到它遇到该断点。一旦遇 
    到断点,代码便暂停了,并且屏幕显示代码窗口(见图13…5)。VB在该语句左边的页边上显示 
    一个黄色箭头。同时,该语句出现在一个黄色底色的框里面。错误和框表明当前语句将要被执 
    行。如果当前语句也包含一个断点,那么页边将重叠显示它们(圆圈和箭头)。  

                                                                                             
图13…5 当VB遇到断点时,就会显示代码窗口并且指定当前语句  
10。 按F8,或者选择调试…逐语句  
11。 重复几次步骤9的指令  
12。 按F5(或者选择运行宏)来继续运行该过程,不必逐语句运行该过程。当你运行完该过程后, 
    VB不会自动删除断�
小提示:按 回车 [Enter] 键 返回书目,按 ← 键 返回上一页, 按 → 键 进入下一页。 赞一下 添加书签加入书架