对于应用程序的开发,程序调试是一个重要步骤。VBA程序的调试有3种模式,它们是设计时、运行时和中断模式。Excel的Visual Basic编辑器提供了丰富的调试工具,包括断点调试、“立即窗口”、“本地窗口”和“监视窗口”等。本文介绍了Excel中VBA程序代码的调试技巧。
1、打开工作表并切换到Visual Basic编辑器,本示例的程序代码如下所示。在“代码”窗口中找到需要设置断点的语句,将光标放置到代码行中,选择“调试”|“切换断点”命令设置断点,如图1所示。按F5键运行程序,程序运行到断点位置即会暂停,同时标示出暂停位置,如图2所示。再次按F5键程序将继续运行。
图1 创建断点
图2 程序在断点处暂停
Sub countcir()
Dim i As Integer
Dim s As Integer
s=0 '初始化汇总变量以及起始数
i=0
Do
i=i+1 '设置下一个被加数i的大小
s=s+i '将被加数汇总到变量s中
If s>=5000 Then Exit Do '当s≥5000,执行Exit Do语句退出循环
Loop
MsgBox“循环次数是”&i&“;汇总结果是”&s '显示循环次数以及汇总结果
End Sub
提示
在“代码”窗口边界标识条上鼠标单击可以直接创建断点。将插入点光标放置到程序中后,按F9键可以在该语句处添加断点,按Ctrl+Shift+F9键或选择“调试”|“清除断点”命令可以清除创建的断点。
2、选择“视图”|“本地窗口”命令打开“本地窗口”对话框,按F8键逐语句执行程序。在运行到断点处时,“本地窗口”中将显示程序中表达式的当前值和变量类型,如图3所示。
图3 程序调试时“本地窗口”显示的内容
提示
“本地窗口”只有在中断模式下才能显示相应的内容,其只能显示当前过程中变量或对象的值,当程序从一个过程转到另一个过程时,其显示的内容也会相应发生改变。在“本地窗口”中,单击对象名称左侧的按钮可展开或收起对象的属性和成员列表。
3、选择“视图”|“监视窗口”命令打开“监视窗口”对话框,选择“调试”|“添加监视”命令打开“添加监视”对话框,在“表达式”文本框中输入需要监视的条件,选择“当监视值为真时中断”单选按钮,单击“确定”按钮关闭对话框,如图4所示。再次打开“添加监视”对话框,在“表达式”文本框中输入变量名,选择“监视表达式”单选按钮,单击“确定”按钮关闭对话框,如图5所示。按F5键运行程序,程序将在满足条件(即i=50)时进入中断模式,“代码”窗口中指示出程序当前运行语句,同时在“本地窗口”中将可以看到监视变量的值,如图6所示。
图4 添加监视条件
图5 添加第二个监视条件
图6 “监视窗口”中显示变量的变化
提示
如果需要编辑已有的监视条件,可以在“监视窗口”中选择某个监视条件后选择“调试”|“编辑监视”命令,打开“编辑监视”对话框对监视条件进行编辑修改。在“监视窗口”中选择监视条件后,按Delete键可以将其删除。
4、选择“视图”|“立即窗口”命令打开“立即窗口”对话框,在代码中添加Debug.Print s和Debug.Print i语句。按F5键运行程序,“立即窗口”中将显示变量s和变量i的运行结果,如图7所示。
图7 “立即窗口”中显示两个变量的值
提示
Debug是代码调试的一个重要工具,使用Debug对象的Print方法能使程序员在不暂停程序的情况下监控变量执行过程中的变化。Print方法在“立即窗口”中显示文本,Print方法显示的文本将不会在程序运行时看到,只能在“立即窗口”中显示。
5、在“代码”窗口中为程序添加断点,运行程序后,在“立即窗口”中输入"?i"后按Enter键,“立即窗口”中将显示程序中断时变量i的值;输入"?s"后按Enter键,“立即窗口”中显示变量s的当前值,如图8所示。
图8 在“立即窗口”中显示变量的值
提示
“立即窗口”能够显示当前语境中变量或表达式的值,值可以通过Print方法或问号“?”来显示。这里要注意,“立即窗口”输出结果最多只有200行,超过200行则只显示最后200行的内容。