VBA过程的调试和出错处理
了解VBA过程的错误类型
VBA过程的错误类型共有三种:语法错误、逻辑错误和运行时间错误。
语法错误通常是指单词拼写、参数引用、格式书写错误以及使用无效的自
变量或者是漏掉了那些需要成对使用的指令如If语句和循环结构等引发的错误。
逻辑错误通常不会给出明确的错误信息。过程可能没有语法错误,甚至运
行无误,然而得到的却是错误的结果。逻辑错误非常难以查并且隐藏得很隐秘。
运行时间错误经常发生在编写代码时没有考虑到的情况。如程序试图访问
用户电脑上某个并不存在的文件或者设备,或者未检测用户权限就对系统进行
没有授权的操作等等都会发生运行时间错误。
调试VBA过程
许多用户在调试过程时遇到错误无从下手,时间一长也就逐渐失去了学习
编程的信心。幸运的是,VBA编辑器提供了许多内置工具,你会发现它们在过
程代码的分析和定位错误源是非常有用的。
1、逐句运行VBA过程
逐句运行代码意思是每次只运行一条语句,这样可以允许用户检查过程里
的每一条语句的运行情况。方法是单击"调试"菜单中的"逐语句"命令或按下F8
快捷键,VBA将会执行每条语句,直到碰到关键字EndSub为止。如果你不希望VBA逐句运行的话,可随时按下F5键来运行过程中剩余的代码。
2、使用断点
如果怀疑过程的某个位置有错误发生,那么你可以在代码中使用断点。方法是将光标移至目标代码行后单击"调试"菜单中的"切换断点"命令(或按下F9键)。当过程运行到此处时立即会显示代码窗口。此时你可以通过按F8键来逐语句运行代码,分析过程代码、检查执行暂停时变量的值,还可以在立即窗口
里敲入语句进行各种各样的测试等。VBA允许用户在一个过程里设置任意多个断点,这样你就可以随心所欲地暂停和继续过程的执行了。
当运行完某个过程后,VBA不会自动删除断点。我们可以选择"调试"菜单中的"清除所有断点"命令或者按下Ctrl+Shift+F9组合键清除所有断点。另外关闭文件时,所有断点也将被自动清除。
3、添加监视表达式
程序中的许多错误是由变量未获得预期的值导致的。如果你想监测程序中某个变量或者表达式的值,那么可以添加一个监视表达式,VAB提供了一个特别的监视窗口,允许用户在过程运行时密切注视变量或者表达式值的变化。方法是选中要监视的变量或表达式,单击"调试"菜单中的"添加监视"命令,确认后在代码窗口下方会看到一个监视窗口,在此窗口中可随时监视变量或表达式的值(如图)。
在监视窗口里,单击你要清除的变量或表达式并且按下Delete键将会清除当前的监视。如果你想查看一个变量或表达式的值,但是你还没有定义监视表达式,可将光标放在你要监视的变量名称或者表达式内部就可以知道它们各自的值了。
比较:断点和监视表达式之间的区别是断点总是将过程中断在某个特定的位置,而监视表达式则是当特定情况(监视值为真中断或者监视值改变时中断)时中断过程。当你不确定变量在哪儿改变时,监视是
非常有用的。你可以简单地添加一个监视断点在某个变量上并正常运行过程,而不必在这么多行代码里逐语句来到变量在那里获取特定的值。
4、操纵书签
如果希望快速地定位到代码中的指定位置,你通过可以设置书签来实现。
使用内置的书签功能,用户可以轻易地标记需要浏览的位置。设置书签的方法是,将插入点移动到定义为书签的语句中的任意位置,单击"编辑"菜单中的"书签",选择"切换书签"命令,当前语句左侧边界上会出现一个蓝的圆角矩形,再次运行此命令将撤消当前的书签设置。如果要清除代码中的所有书签可运行"编辑"菜单中的"书签",选择"清除所有书签"命令。
5、终止VBA过程
VBA过程运行时我们可以随时中断它。那如何终止VBA过程呢?除了按Esc 键、设置断点、添加监视表达式等方法外,VBA还提供了以下两种中断过程的
方法:一是按Ctrl+Break组合键;另外还可以通过插入Stop语句来实现。当过
程被终止时,断点便发生了,VBA此时会记住所有变量和语句的值。
小技巧:将下述语句加入到过程代码中可以防止用户中断你的过程:
Application.EnableCancelKey=xlDisabledVBA过程中的错误处理
VBA过程运行出错时通常会显示一个带错误代码的缺省的错误信息,这样
的提示信息让用户费解。怎样才能忽略错误的代码或者显示一个更友好更容易vba编程技巧
理解的错误信息,从而引导用户去改正错误呢?
通过在VBA过程中加入错误处理代码可以实现。方法是在过程中添加OnError语句,它会告诉VBA当运行时发生错误应该做什么操作。换句话说,VBA使用OnError语句来激活错误处理程序以捕捉运行时间错误。OnError语句的使用方法如下:
1、OnErrorGoTo标签:设置一个标签,当错误发生时跳到该标签。该标签
指示错误处理程序的开始。当前标签必须和OnError语句出现在同一过程里面。
2、OnErrorResumeNext:当运行时间错误发生时,系统将忽略导致错误的代码行,不显示错误信息,而是从下一行开始继续执行过程中的其它语句。
3、OnErrorGoTo0:关闭程序里的错误捕捉。当VBA运行该语句后,错误会
被发现,但是过程中没有设置错误陷阱。
另外,用户也可以选择使用以下任何方式退出错误陷阱:ExitSub、ExitFunction、EndSub、EndFunction等。
本节我们学习了如何测试VBA过程以确保它们的运行,包括怎样使用断点和监视逐步调试过程代码;如何使用内置的调试工具;如何在中断模式下使用立即窗口以及如何使用错误处理程序捕捉错误等。平时大家要尽可地花些时间来学习和熟悉这些工具的使用,只有掌握了调试的技巧,才能帮助我们节省更多时间并减少错误的发生。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。