今日学习目标
- 掌握断点调试方法
- 学会使用监视窗口
- 学会使用立即窗口
知识点
1. 调试工具
- F9:设置/取消断点
- F8:逐语句执行
- Shift+F8:逐过程执行
- Ctrl+F8:运行到光标处
VBA 断点调试的标准流程:在怀疑出问题的行按 F9 设断点(行首出现红点),运行宏后停在断点处进入中断模式,再按 F8 一行行往下走,鼠标悬停在变量上即可查看当前值。F8 逐语句会进入被调用过程的内部;只想把调用当成一步跳过,用 Shift+F8 逐过程;想快速跳到某一行看中间状态,用 Ctrl+F8。
2. 窗口
- 监视窗口:监视变量值
- 立即窗口:执行代码、打印变量
监视窗口(视图 → 监视窗口)通过"添加监视"盯住一个表达式,值每次变化一目了然。立即窗口(Ctrl+G 打开)在中断模式下输入 ?变量名 回车即打印值,也能输入 ?Range("A1").Value 这类表达式,甚至直接执行一行语句。代码里写 Debug.Print x 则不打断运行,把值输出到立即窗口,适合观察循环中变量的变化轨迹。
今日代码
vbaSub 调试示例_循环()
Dim i As Integer
Dim sum As Integer
sum = 0
For i = 1 To 10
sum = sum + i
Next i
MsgBox "1到10的和: " & sum
End Sub在 sum = sum + i 这行按 F9,运行后按 F8,每走一圈在立即窗口输入 ?sum 看累加结果——这是排查循环计算错误最直接的手段。bas 文件里的 调试示例_条件、调试示例_数组 可用同样方法练习条件跳转和数组赋值。
实战场景
一段求和程序结果总差 1,用断点定位:
vbaSub 求和调试()
Dim i As Integer
Dim sum As Integer
sum = 1 ' 错误:初值应为 0
For i = 1 To 10
sum = sum + i
Next i
MsgBox "1到10的和: " & sum ' 输出 56,应为 55
End Sub在 sum = sum + i 设断点,F8 走两圈,发现第一圈后 sum 是 2 而不是 1,回头检查初始化即可找到问题。调试思路就是:断点缩小范围 → 悬停/立即窗口观察状态 → 对照预期找差异。
练习题
- 用断点调试一个循环程序
- 用立即窗口检查变量值
- 使用监视窗口跟踪数组变化
参考解答
1. 在循环体内按F9设置断点,按F8逐行执行,观察变量值变化。 2. 在立即窗口输入?变量名或Debug.Print 变量名查看值。 3. 在Watch窗口添加监视表达式,跟踪数组每个元素的变化。
常见错误与排查
- 按 F8 没有反应——光标不在代码窗口,或宏正在运行,先点进代码窗口。
- 断点不生效——断点落在注释或空行上,或该行代码根本没被执行到(如条件分支的另一侧)。
- 立即窗口
?变量名报"变量未定义"——当前中断的过程里没有该变量,或已超出作用域。 - 单步执行时才报
Run-time error '9': Subscript out of range——走到arr(i)且 i 越界(数组1 To 5却访问arr(0)),正好借机修复。 - 中断模式下改代码提示"该操作将被重置"——改完会退出中断状态,断点需重新设置,属正常现象。
延伸练习
- 用 F8 完整单步 bas 中的
调试示例_数组,在监视窗口添加arr(1)到arr(5)观察赋值过程。 - 在立即窗口执行
?Worksheets.Count、?ThisWorkbook.Name,练习不写代码直接"问"程序。 - 给
调试示例_循环的循环体加Debug.Print i, sum,运行后在立即窗口回看全部累加轨迹。
由在线工具箱(www.vba.net)整理制作