VBA代码编辑器VBE.docx
《VBA代码编辑器VBE.docx》由会员分享,可在线阅读,更多相关《VBA代码编辑器VBE.docx(7页珍藏版)》请在冰豆网上搜索。
VBA代码编辑器VBE
1.3 VBA代码编辑器(VBE)
VisualBasic编辑器(VBE)是一个集成的开发环境,是我们查看、编辑、调试VBA程序的重要工具,熟悉和掌握VBE对于提高代码编写的速度,以及调试程序、迅速排除错误有着很重要的帮助。
打开Access数据库,选择菜单【工具】∣【宏】∣【VisualBasic编辑器】,便进入VBE。
1.3.1 VBE窗口的分类及功能
编辑器中有很多窗口,它们可以以窗格的形式显示。
用户可根据自己的习惯用鼠标拖动它们停靠在窗口任意位置,或者选择性的显示一些窗格,如图8-6与8-7所示。
图1-6 VBE窗口1
图1-7 VBE窗口2
代码窗口:
代码窗口用来编写、显示以及编辑VisualBasic代码。
过程与过程之间会显示一条灰色横线以分割。
“过程查看”图标,显示所选的过程,同一时间只能在代码窗口中显示一个过程。
“全模块查看”图标,显示模块中全部的代码。
立即窗口:
立即窗口键入或粘贴一行代码,然后按下ENTER键来执行该代码,立即窗口中的任何代码或者结果都不能够被存储。
可以用鼠标把选定的代码在立即窗口与代码窗口之间相互拖放。
程序中的“Debug.Print”语句也会将结果输出到立即窗口。
注意在立即窗口显示的信息容量是有限的,当使用大量Debug.Print语句时,可能看不到位于开头位置语句的打印结果。
如果内容比较多,可以考虑将输入信息保存到一个指定的数据表中,以便事后进行观察和分析。
在中断模式下,立即窗口中的语句,是根据显示在过程框的内容或范围来执行的。
我们往往用此来监视代码的执行情况。
本地窗口:
本地窗口打开时,可自动显示出当前模块级别及在当前过程中的所有变量的声明及其当前值。
监视窗口:
当工程中有定义监视表达式定义时,就会自动出现,窗口中列出了监视表达式及其值、类型与上下文。
1.3.2 对象浏览器
按下快捷键F2,可打开对象浏览器,显示出对象库以及这些对象库可供使用的对象、属性、方法、函数及常数。
可以用它来搜索及使用内置的对象,或是来源于其他引用应用程序的对象,如图8-8所示。
图1-8 对象浏览器
不过,在立即窗口或者代码窗口中键入代码时,编辑器也会自动地显示出对象的属性、方法、常数。
例如,在代码窗口中键入“Docmd.”,当这个小圆点打出的时候,会在光标的位置显示出一个小列表窗口,这里包含了这个对象的所有集合、方法、属性与常数,并可自动完成,如图8-9所示。
图1-9 自动显示对象的属性、方法、常数
1.3.3 跟踪与调试
在编写程序的过程中,我们往往尽量保证程序能够正确的执行,不出现任何错误。
但遗憾的是,没有人能完全做到。
需要验证程序的正确性,特别是找出程序最难发觉的逻辑错误并给予纠正。
除了直接检查程序执行结果这种简单的检测手段,往往还需要详细地了解程序在执行过程中的变量的变化情况;程序流程是否符合事实逻辑或者设计初衷。
所以对程序进行进一步的分析是十分必要的。
VBE编辑器为我们提供了比较方便的程序调试方法。
一般来说,调试VBA程序可以使用这几种方法在程序执行的某个过程中暂时挂起程序,并保持其运行环境,以供检查。
检查的方法包括:
逐语句执行、设置断点、设置监视、插入Stop语句、使用Debug对象等,下面对它们一一进行介绍。
(1)逐语句执行
将光标定位在需要调试的过程中,单击【调试】菜单的【逐语句】命令,或者按F8键运行。
这样,程序每执行一条语句(变量声明语句一次性执行完成除外)便暂停下来。
此时,用户可进行各种编辑操作。
如想接着向下执行一条语句只需按F8即可。
这样我们可以利用本地窗口,详细地观察每执行一步变量的变化情况,也可以看到程序分支的选择情况。
这种方法在调试程序的时候会经常用到。
逐语句执行的任何时候,可按F5或者单击【运行】菜单的【运行子过程/用户窗体】命令一次性执行完余下的程序段。
也可单击【运行】菜单的【重新设置】命令终止正在执行的过程。
(2)设置断点
单击需要调试的语句左边的边界标识条,即代码窗左边灰色边缘,该行代码以暗红色的背景显示,并在边界表示条显示出一个圆点,则设置该语句为一个断点;一段程序可设置多处断点。
运行程序,当执行到该语句时,程序被暂停下来,以黄色的背景显示当前语句行。
此时,我们可以通过本地窗口查看当前的变量值;或者在立即窗口中查看对象的属性、表达式的值;还可以编辑程序代码,也可以按下F5继续执行或者按F8单步执行,或者单击工具栏【重新设置】按钮直接退出被调试的程序。
断点是临时性的标志,不会随VBA程序一起保存到数据库中。
(3)设置监视
通过本地窗口,只能看到在程序运行时,该过程和模块中声明的变量类型以及其当前值,我们可以监视更为灵活的表达式。
在代码窗,右击鼠标,在弹出的快捷菜单中选择【添加监视】菜单项,出现如图8-10所示的对话框。
图1-10 添加监视
监视表达式是在监视窗格用类似本地窗口方式显示表达式的类型和结果。
选择不同的监视类型,可以监视表达式的变化情况,也可以在监视表达式满足特定条件的时候,让正在执行的程序挂起,以作进一步的分析。
同样,监视不会保存在程序中,当关闭数据库时,监视表达式的设定全部丢失。
(4)Debug对象
Debug对象是专门用在程序调试阶段,实现特定调试功能,它作为程序的一部分可以保存在数据库中。
Debug语句非常特殊,在Access应用程序编译成MDE/ADE时,Access编译器将忽略所有Debug对象的语句,而不编译到目标文件中。
Debug对象只有两个方法,没有任何属性和集合。
其中Print方法我们在之前的程序中已经多次见过,Print方法实现了向立即窗口输出信息的功能。
Debug对象的Assert方法,可以实现当不满足给定条件时,挂起正在执行的程序。
与断点不同的是,Assert方法是有条件的挂起,而程序执行在所有断点处都会挂起,使用Debug对象的语句会保存在程序中,而断点则不能。
例如:
Debug.AssertFalse
当执行这条语句时总是会挂起程序,因为表达式“False”恒为假。
当然实际应用中一般并不会用这样没有意义的恒假表达式,而是使用能反映一定监视目的的表达式。
(5)Stop语句
Stop语句也实现了挂起程序的功能。
但它与Debug.Assert不同的是,Stop语句是无条件挂起,程序即使编译以后,仍保留在程序中。
当程序调试以后忘记删除Stop语句,可能引起错误的结果,因为程序在这里不再自动继续执行。
Stop语句用得较少。
1.3.4 自定义VBE环境
(1)自定义字体格式
默认情况下,代码编辑区以及立即窗口中的文字显示为9号宋体字。
单击【工具】∣【选项】,在【选项】对话框的【编辑器格式】选项卡中,可以改变显示的字体、大小、颜色和样式,如图8-11所示。
图1-11 设置编辑器格式
(2)编辑器环境
如前面章节所讲到的,VBE默认允许不显式声明变量,但这往往会带来很多意想不到的副作用,因此,在【选项对话框】的【编辑器】选项卡中,建议将【要求变量声明】选中。
建议将【编辑器】选项卡中其他的选项也都全部选中,如图8-12所示。
图1-12 编辑器选项
(3)错误处理
如果你发现程序总是在出错语句或者出错模块停止,却不能进入错误处理程序,那么你需要在【选项】对话框的【通用】选项卡中,在【错误捕获】选项组勾选【遇到未处理的错误时中断】单选按钮,如图8-13所示。
图1-13 编辑器通用设定
当然也有这样的情况,过程中某个不能预期的语句产生了错误,而直接进入了错误处理程序。
这时,如果你想查看具体是哪条语句出现了错误,则可在【错误捕获】选项组中勾选【发生错误则中断】单选按钮。
(4)窗口停靠
在编辑器中,各窗口可以设置为是否能够以窗格形式显示。
打开【选项】对话框的【可连接的】选项卡,在【可连接的】选项组勾选各个选项。
选中的选项,就可以连接在一起以窗格的形式排列;没有选中的那些窗口,则只能以窗口的形式停留在屏幕的任意位置。
1.3.5 提高代码编辑效率
当代码越写越长,过程越来越多的时候,调试和编辑代码也变得越来越麻烦,因为需要把光标从一个模块定位到另一个模块,从位于模块靠近顶部一个过程转移位于模块靠近底部到另一个过程,等等。
如何快速定位到合适的位置呢?
使用快捷键无疑会成倍加快浏览速度。
当然除了传统的Home、End、PageUp、PageDwon、^+Home、^+End快捷以外,还有一些非常有用的快捷键:
过程中跳转:
在同一个模块中,从上往下,或者从下往上,依次快速移动光标到各个过程,可以用快捷键^+PageDown或者快捷键^+PageUp;
定位到声明语句:
把光标移动到常量名、变量名、过程名上,按快捷键Shift+F2可以将光标转移到常量、变量。
后者构成的声明语句,也可以右击鼠标右键,选择快捷菜单【定义】转移到;
返回上一位置:
如果要返回到刚才光标的行,按快捷键Ctrl+Shift+F2,也可以右击鼠标右键,选择快捷菜单【最后位置】即可;
快速执行:
F5运行过程,F8单步执行,Ctrl+F8运行到光标处,F9设置或者清除一个断点。
程序中有一些重要的语句,可能在编辑过程中需要特别关注并反复查看。
对于这部分内容,哪怕它们是在不同的模块中,都可以用书签将它们标识起来。
单击【编辑】∣【书签】∣【切换书签】,即可在当前位置设置或清除一个书签。
单击【编辑】∣【书签】∣【下一书签】或【上一书签】,即可实现多个书签所标注的行的快速定位。
书签所在菜单的位置安排并不算十分合理,并且没有快捷键,使用起来十分不方便,不过在VBE的调试工具栏,提供了四个关于书签的工具按钮。
需要注意的是,书签是不会被保存的,当关闭数据库时,书签信息将自动丢失。