调试 VBA 代码
本页介绍了调试 VBA 代码的方法。
简介
调试程序是软件开发中最重要的步骤之一。了解 VBA 的调试工具可以使调试更容易、更高效。本页介绍了几个 VBA 的内置调试工具,您可以在测试和调试应用程序时使用。
单步执行代码
调试代码的第一种方法是一次单步执行代码。要单步执行代码,请将光标放在要分析的第一行代码上,然后按 F8 或在 Debug 菜单上选择 Step Into。下一行要执行的代码将以黑色字体显示在黄色背景中。请注意,突出显示的代码行尚未执行——它是下一行要执行的。
如果您的代码调用另一个过程,使用 F8 单步执行代码将导致执行以逐行顺序进入被调用的过程。如果您想不单步执行被调用的过程,请按 Shift+F8。这将执行被调用的过程,然后在调用过程后在代码行上暂停。如果您已经在逐步执行某个过程,则可以按 Ctrl+ F8 逐行恢复代码执行。任何时候您在逐步模式或断点处暂停(见下文),您都可以在 RunF5 或 Continue /strong> 菜单使 VBA 运行完成或直到遇到暂停语句。
当您在逐步模式下暂停时,您可以从即时窗口查询或更改变量的值。
断点和停止命令
断点是放置在代码行上的标记,它会在执行该行之前立即暂停执行。您可以通过将光标放在有问题的代码行上并按 F9,在 Debug 上选择 Toggle Breakpoint 来为代码行添加断点strong> 菜单,或单击代码行旁边的左边距。设置断点后,该行以砖红色背景显示,带有白色字体。当您运行代码时,执行将在带有断点的代码行之前暂停,并以黄色背景和黑色字体显示。请注意,黄色行尚未执行——它是下一行要运行的代码。
当代码在断点处暂停时,您可以在“立即”窗口中发出命令来更改或查询变量的值。要查看变量的内容,请输入 ?字符后跟变量名称,然后按 Enter。您可以通过在即时窗口中输入 VariableName = NewValue 并按 Enter 来更改变量的值。
如果即时窗口不可见(通常位于 VBA 编辑器屏幕的底部),请按 Ctrl+G 或选择 即时窗口 从查看菜单使窗口可见。
要删除断点,请将光标放在代码行上并按F9。您可以通过从 Debug 菜单中选择 Clear All Breakpoints 或按 Ctrl+Shift+F9。 VBA 还提供 Stop 命令。这只是停止该行代码上的代码执行并进入中断模式。
完成代码调试后,请务必返回并清除所有断点(从 Debug 菜单中选择 Clear All Breakpoints或按 Ctrl+Shift+F9) 并确保删除或注释掉所有 Stop 语句。
当您在断点处暂停或处于分步模式时,您可以更改要执行的下一行,可以在当前行之前重新运行一段代码,也可以在该行之后跳过语句.右键单击要恢复执行的行并右键单击并选择 Set Next Statement 或从 Run 菜单中选择 Set Next Statement .将在选定的代码行处继续执行。
调试命令
VBA 提供了一个带有两个属性 Print 和 Assert 的 Debug 对象,您可以使用它们来显示变量的值并控制程序流程。 Debug.Print 会将后面的内容写入立即窗口。代码执行不会中断。在立即窗口中显示文本后,代码执行将继续运行。您可以在Debug.Print 语句中将文字文本与变量名混合使用。例如,
Debug.Print "The value of variable X is: " & X
您可以在“立即”窗口中同时显示多个变量,方法是用逗号分隔它们。例如,
Debug.Print X, Y, Z
Debug.Assert 命令是一个条件断点,如果 Assert 语句后面的表达式为 False,它将导致在 Debug 语句上暂停执行。例如,
Debug.Assert Var >= 0
如果Var >= 0 是False,这将在Debug.Assert 语句上暂停;也就是说,如果Var 为负数,它将暂停。当条件为 False 而不是 True 时暂停执行可能看起来倒退了,但 Assert 方法是从 C 语言中采用的,其用法与 C 中的用法相同。
完成调试后,请务必删除或注释掉 Debug.Print 和 Debug.Assert 语句。您通常不希望这些语句在您的应用程序的正常使用期间起作用。
当地人窗口
局部变量窗口允许您在单步执行过程时查看过程中所有变量的值。要显示 Locals 窗口,请从 View 菜单中选择 Locals Window。使用 Locals 窗口显示变量值比检查 Immediate 窗口中的值更容易。对于简单的变量类型(例如,Long 和 String 变量),值显示在一行上。对于复杂类型或对象(例如 Range 变量),其属性显示在可折叠的树状结构中。
监视窗口
Watch 窗口显示所有有效的 Watch。您可以通过从 查看 菜单中选择 Watch Window 来显示 Watch 窗口。 Watch 是 VBA 的指令,用于在表达式为 True 或被监视的变量更改值时暂停代码。要在变量上创建 Watch,请打开 Watch 窗口并右键单击 Watch 窗口并从弹出菜单中选择 Add Watch... 或选择 Add Watch... em> 从调试窗口。在“添加观察”对话框中,在“表达式”文本框中输入要观察其值的变量名称。然后选择值更改时中断。当您运行代码时,执行将在修改变量值的行之后的行处暂停。当代码暂停时,变量的值已经被更新了。
要删除手表,请在“手表”窗口中右键单击它,然后从弹出菜单中选择删除手表。要修改 Watch,请在 Watch 窗口中右键单击它,然后从弹出菜单中选择 Edit Watch。
调用栈
调用堆栈是由 VBA 维护的一种数据结构,用于跟踪哪个过程调用了另一个过程。例如,如果过程AAA 调用BBB,而后者又调用CCC,则调用堆栈窗口将显示从最近的过程开始的过程列表,然后在其下方显示为到达当前过程而执行的过程链位置。您可以通过从查看菜单中选择调用堆栈来查看调用堆栈。这对于跟踪在当前位置结束的执行流程很有用。不幸的是,没有编程方式从调用堆栈中获取信息。
来源:Pearson Software Consulting 的 Chip Pearson:http://www.cpearson.com/Excel/DebuggingVBA.aspx