7.3 Excel已经准备好的调试工具

对于不太复杂的程序,寻找错误并不太难。当程序过长时,从满堆的代码中查找和修正错误就要伤神得多。

幸运的是,Excel已经准备好了一套方便有效的代码调试工具,善用它,可以使调试代码的工作变得更简单、更快捷。

7.3.1 让程序进入中断模式

正因为在中断模式下可以一边运行程序,一边发现错误并修正错误,所以调试代码多数时间都选择在中断模式下进行。

img062 出现编译错误时

如果程序存在编译错误,运行时系统会自动显示错误提示对话框,如图7-1所示。

对话框上有两个按钮,单击【帮助】按钮可以查看该错误的帮助信息;单击【确定】按钮即可进入中断模式,如图7-4所示。

img684

图7-4 出现编译错误时

img062 出现运行时错误

如果程序存在运行时错误,运行后会停止在发生错误的代码所在行,自动显示错误提示对话框,如图7-2所示。

这时可以单击对话框上的【调试】按钮让程序进入中断模式,如图7-5所示。

img685

图7-5  出现运行时错误

img062 中断一个正在执行的程序

如果程序中没有出现编译错误和运行时错误,程序会一直执行,直到结束。如果出现死循环,会一直执行下去,不会中止。如:

img686

如果一个程序正在运行,当按下<Esc>键或<Ctrl+Break>组合键后,系统会中断执行它,并弹出提示对话框,如图7-6所示,单击对话框上的【调试】按钮即可让程序进入中断模式。

img687

图7-6 中断一个正在运行的程序

7.3.2 为程序设置断点

img062 什么是断点

断点像公路中途在检查站,当汽车开到这里就得停车接受检查。

如果你怀疑程序中某行(或某段)的代码存在问题,可以在该处设置断点。当程序运行到断点所在行时会暂停执行,停止在断点所在行,进入中断模式,如图7-7所示。

img688

图7-7 程序停止在断点所在行

进入中断模式后,可以按<F8>键逐句执行程序,观察运行情况,从而发现并修正存在的错误。

img062 给程序设置断点

方法一:

设置断点的方法一,如图7-8所示。

img689

图7-8 利用<F9>键设置或清除断点

方法二:

设置断点的方法二,如图7-9所示。

img690

图7-9 利用菜单命令设置或清除断点

方法三:

设置断点的方法三,如图7-10所示。

img691

图7-10 单击边界条设置或清除断点

如果想清除程序中的所有断点,可以依次执行【调试】一【清除所有断点】菜单命令(或按<Ctrl+Shift+F9>组合键),如图7-11所示。

img692

图7-11 清除程序中的所有断点

7.3.3 使用Stop语句

给程序设置的断点会在关闭文件的同时自动取消,如果你需要重新打开工作簿后继续使用设置的断点,可以使用Stop语句。

在程序里加入一个Stop语句,就像给程序设置了一个断点,当程序运行到Stop语句时,会停止在Stop语句所在行,进入中断模式,如图7-12所示。

img693

图7-12 使用Stop语句中断程序

Stop语句在重新打开文件后依然存在,当不再需要Stop语句时,需要手动清除它。

7.3.4 使用立即窗口

如果你怀疑程序中的错误是因为变量设置错误引起的,可以在程序中使用Debug. Print语句将程序运行中变量或表达式的值输出到【立即窗口】中,程序运行结束后,在【立即窗口】中查看变量值的变化情况,如图7-13所示。

img694

img695

图7-13 使用立即窗口查看变量的值

如果程序处于中断模式下,也可以将光标移到变量名称上,直接查看变量的值,如图7-14所示。

img696

图7-14 在中断模式下查看变量的值

7.3.5 使用本地窗口

在中断模式下,还可以利用【本地窗口】查看变量的数据类型和当前值,如图7-15所示。

img697

图7-15 使用本地窗口查看变量的值和数据类型

如果【本地窗口】没有打开,可以依次执行【视图】一【本地窗口】菜单命令打开它,如图7-16所示。

img698

图7-16 调出本地窗口

7.3.6 使用监视窗口

在中断模式下还可以使用【监视窗口】观察程序中变量或表达式的值。

使用【监视窗口】来监视变量或表达式前,必须先定义要监视的变量或表达式,监视表达式可以在设计模式或中断模式下定义。

img062 使用快速监视

使用快速监视如图7-17所示。

img699

图7-17 快速监视

完成后为程序设置断点,运行程序,就可以在【监视窗口】中看到相应的信息了,如图7-18所示。

img700

图7-18 使用监视窗口

img062 手动添加监视

手动添加监视如图7-19所示。

img701

图7-19 手动添加监视

只有当程序处于中断模式时才能使用【监视窗口】,所以只有将程序切换到中断模式,【监视窗口】才能正常工作。

img062 编辑或删除监视表达式" class="reference-link">img062 编辑或删除监视表达式

编辑或删除监视表达式如图7-20所示。

img702

图7-20 编辑或删除监视