打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VBA - 代码调试(一)
userphoto

2023.12.14 四川

关注

据有关调查,相当一部分程序员会将一半的程序开发时间用于代码调试,由此可见代码调试在程序开发中的重要性。Excel中的VBE提供了丰富的调试工具,如【立即】窗口、【本地】窗口、【监视】窗口和断点调试等。

VBA代码中的错误一般可以分为如下3类。

编译错误:该类错误是由不正确的代码产生的,如使用了错误的关键字或使用了If…Then语句但没有与之对应的End If语句等。此类错误在VBE中编译代码时将被系统检测到并给出相应的错误提示信息(弹出提示消息框和错误代码行高亮显示)。

运行时错误:当代码试图运行不可能完成的操作时,会产生运行时错误,如重命名已经打开的文本文件、除数为零等。

逻辑错误:程序代码语法完全正确,运行中也没有不正当的操作,但没有出现预计的结果,这就是所谓的逻辑错误。

代码调试主要针对后两种错误,即运行时错误和逻辑错误。

10.1 断点调试

在VBE中依次单击【视图】→【工具栏】→【调试】,将显示如图10-1所示的【调试】工具栏。

【调试】工具栏中的按钮如表10-1所示。 

10.1.1 程序状态

VBE开发代码时有3种状态:设计时、运行时和中断模式。

设计时(Design Time)指用户创建程序的过程,在此状态下可以设计窗体、插入控件、编写代码、使用【属性】窗口设置或查看属性值。此时不可以运行代码或使用调试工具,但可以设置断点或创建监视表达式。

运行时(Run Time)指程序代码运行过程中,在此状态下可以查看代码和使用调试工具,但是不能编辑代码。

中断模式(Break Mode)指暂停运行程序,在此状态下可以编辑代码、修改数据、结束或继续运行程序。程序进入中断模式后将停留在第1个可以运行的语句代码行之上(黄色高亮标注此代码行)。

设计时切换到运行时

方法1:单击【调试】工具栏中的【运行子过程/用户窗体】按钮 。

方法2:依次单击VBE菜单【运行】→【运行子过程/用户窗体】。

方法3:按<F5>键。

设计时切换到中断模式

方法1:单击【调试】工具栏中的【逐语句】按钮 。

方法2:依次单击VBE菜单【调试】→【逐语句】或【运行到光标处】。

方法3:按<F8>键或<Ctrl+F8>组合键。

运行时切换到设计时

方法1:单击【调试】工具栏中的【重新设置】按钮 。

方法2:依次单击VBE菜单【运行】→【重新设置】。

运行时切换到中断模式

方法1:单击【调试】工具栏中的【中断】按钮 。

方法2:依次单击VBE菜单【运行】→【中断】。

方法3:按<Ctrl+Break>组合键。

中断模式切换到设计时

方法1:单击【调试】工具栏中的【重新设置】按钮 。

方法2:依次单击VBE菜单【运行】→【重新设置】。

中断模式切换到运行时

方法1:单击【调试】工具栏中的【继续】按钮 (在中断模式下,原来的【运行子过程/用户窗体】按钮将变成【继续】按钮)。

方法2:按<F5>键。

10.1.2 异常运行状态

VBE中的“错误捕获”设置决定出现VBA代码运行时错误后,为用户提供哪种形式的错误提示信息。

依次单击VBE菜单【工具】→【选项】,在弹出的【选项】对话框中单击【通用】选项卡,在【错误捕获】组中选中【发生错误则中断】选项,然后单击【确定】按钮,如图10-2所示。

运行VBA代码时如果出现错误,将弹出错误提示对话框,如图10-3所示。此时单击【调试】按钮将打开VBE进入中断模式,在【代码】窗口中出错的语句行将处于高亮显示状态。

如果在如图10-2所示的【错误捕获】组中选中【遇到未处理的错误时中断】选项,运行VBA代码时如果出现错误,将弹出错误提示对话框,如图10-4所示。此时单击【确定】按钮将关闭错误提示对话框终止程序运行,并无法打开VBE。 

10.1.3设置断点

断点就是程序中代码暂停运行的位置。设置断点是代码调试的一个重要的方法。设置断点后,当代码运行到断点所在的语句时,程序便进入中断模式,【代码】窗口中将显示断点所在的模块,并高亮显示断点代码行,如图10-5所示。此时在【立即窗口】和【本地窗口】中可以查看变量及对象的属性值。

在VBE中设置断点的方法如下。

方法1:将鼠标指针悬停在【代码】窗口左侧灰色区域内,鼠标指针将显示为指向左上方的箭头 ,此时单击即可设置该代码行为断点,如图10-6所示。 

方法2:在指定代码行中任意位置单击鼠标左键,进入编辑状态,此时鼠标指针显示为 ,然后按<F9>键或依次单击VBE菜单【调试】→【切换断点】即可设置指定代码行为断点。

10.1.4清除断点

在VBE中清除断点的方法如下。

方法1:单击【代码】窗口左侧灰色区域中的断点标识 。

方法2:在指定代码行中任意位置单击鼠标左键,进入编辑状态,此时鼠标指针显示为 ,然后按<F9>键或依次单击VBE菜单【调试】→【切换断点】。

如果需要清除所有的断点,可以按<Ctrl+Shift+F9>组合键或依次单击VBE菜单【调试】→【清除所有断点】。

10.1.5用Stop语句设置断点

Stop语句可以暂停程序的运行。在代码中使用Stop语句相当于设置断点,程序运行到Stop语句将自动进入中断模式,如图10-7所示。

10.1.6单步调试

在代码调试过程中,如果无法确定错误发生在哪一句代码,就可以使用单步调试来定位发生错误的代码的准确位置。单步调试看似比较费时费力,但这是最行之有效的调试方法之一。通过逐步地排查错误,可以准确地定位问题所在。熟练地掌握断点设置和单步调试技术后,

将极大地提高代码开发效率。

在VBE中进行单步调试的方法如下。

“逐语句”调试

单击【调试】工具栏中的【逐语句】按钮 或按<F8>键,也可以依次单击VBE菜单【调试】→【逐语句】,进行“逐语句”调试。

“逐语句”调试每次运行一个代码语句。使用手动断行的多行代码(在代码行末使用“ _”作为续行标识),虽然在【代码】窗口中显示为多行,但是运行代码时仍被视为一个代码语句。

按<F8>键,VBA将运行当前语句,然后高亮显示下一个语句并进入中断模式,被高亮显示的语句可以是在同一个过程中,也可以属于另外一个被调用的子过程或函数。  

“逐过程”调试

单击【调试】工具栏中的【逐过程】按钮 或按<Shift+F8>组合键,也可以依次单击VBE菜单【调试】→【逐过程】,进行“逐过程”调试。

在单步调试中如果当前语句包含对子过程或函数的调用,“逐语句”方式将进入被调用的子过程或函数中逐句运行。而“逐过程”方法则将被调用的子过程或函数作为一个整体来运行(被调用的子过程或函数中有断点或Stop语句时除外),然后高亮显示当前过程中的下一个语句并进入中断模式。如果不需要分析被调用的子过程或函数代码,则应使用“逐过程”调试。

“跳出”调试

当单步调试进入被调用的子过程或函数后,如果不再需要继续分析此过程中的后续代码,则可单击【调试】工具栏中的【跳出】按钮 或按<Ctrl+Shift+F8>组合键,也可以依次单击VBE菜单【调试】→【跳出】,运行剩余代码至子过程或函数的结束处,并在调用此子过程或函数的语句之后进入中断模式。

“运行到光标处”调试

在【代码】窗口中将光标定位在代码过程中的任意可运行的代码行,然后依次单击VBE菜单【调试】→【运行到光标处】,或者按<Ctrl+F8>组合键,即可运行代码至光标所在的代码行暂停,并进入中断模式,此时高亮显示的代码行尚未被运行。

如果【代码】窗口中处于编辑状态的代码行不可运行(如变量声明语句),此时按<Ctrl+F8>组合键将弹出提示,如图10-8所示。 

未完,待续……

1

好书推荐

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VC++6.0环境下调试c语言代码的方法和步骤
如何调试Excel VBA代码
NI LabVIEW调试工具
Excel 【基础教程】VBA调试技巧
delphi异常处理
11个高效的VS调试技巧
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服