excel_vba_编程教程(完整版)-第72部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
是点击你要暂停程序的代码左边的页边。同时,带断点的代码行显示为白字紫红底色(见图
13…4)。断点的颜色可以在选项对话框(工具菜单)的编辑器格式页上更改。
251
… 页面 268…
图13…4 设置了断点的代码行显示了选项对话框里编辑器格式设定的颜色
9。 运行过程ChangeCode。当你运行该过程时,VB将执行所有的语句,直到它遇到该断点。一旦遇
到断点,代码便暂停了,并且屏幕显示代码窗口(见图13…5)。VB在该语句左边的页边上显示
一个黄色箭头。同时,该语句出现在一个黄色底色的框里面。错误和框表明当前语句将要被执
行。如果当前语句也包含一个断点,那么页边将重叠显示它们(圆圈和箭头)。
图13…5 当VB遇到断点时,就会显示代码窗口并且指定当前语句
10。 按F8,或者选择调试…逐语句
11。 重复几次步骤9的指令
12。 按F5(或者选择运行宏)来继续运行该过程,不必逐语句运行该过程。当你运行完该过程后,
VB不会自动删除断点。注意带有VLookup函数的代码行还是加亮的。
在本例中,你只设置了一个断点。VB允许你在一个过程里设置任意多个断点。这样,你就可以
随心所欲地暂停和继续你过程的执行了。你可以分析你的程序代码、检查执行暂停时变量的值。
你也可以通过在立即窗口里敲入语句进行各种各样的测试。
13。 通过选择调试…清除所有断点,或者按下Ctrl+Shift+F9,可以清除断点。
所有断点都被清除了。如果你在某个过程里面设置了多个断点,并且想要只清除其中的一个或
252
… 页面 269…
几个,那么可以点击你想要清除断点的代码行并且按下F9(或者选择调试…切换断点)。当断点
不再需要时,你应该清除它们。当你关闭文件时,所有断点将自动被清除。
技巧13…2 什么时候使用断点
如果你怀疑你的过程根本就没有执行过某段代码块的话,那么设置断点。
4。在中断模式下使用立即窗口
一旦程序执行中断,当代码窗口出现时,你可以激活立即窗口并且输入VBA指令,例如,来查明哪
一个单元格是当前活动的或者活动工作表名称是什么。你也可以使用立即窗口来更改变量的内容,
以便改正可能导致错误的值。到现在,你应该已经是个使用立即窗口的专家了。图13…6显示了该暂
停的过程ChangeCode,和在中断模式下,向VB问问题的立即窗口。
在中断模式下,你可以很快地查明代码窗口里变量的内容。只要在运行的过程中简单地将光标移动
到变量上,就可以知道该变量的内容了。例如图13…7里所示的VarValue过程,断点设置在第二次出
现的Workbooks。Add语句上。
图13…6 当代码执行被暂停时,通过输入适当的语句到立即窗口里,你就可以找到很多问题的答案
图13…7 在中断模式下,你可以将鼠标指向某个变量,查明该变量的值
253
… 页面 270…
当VB遇到该语句,代码窗口(中断模式)就会出现。因为VB已经执行了那条语句,将当前活动工作
簿名称储存到变量myName(译者:原文为myBook),所以你将鼠标指向该变量名称时,就可以查明
该变量的值。该变量名称及其当前值出现在文字框里面。要同时显示过程里使用的多个变量的值的
话,你就应该使用当地窗口,本章的后面将会讨论到。
5。使用 Stop 语句
有时候,你不能马上测试你的程序,如果你设置了断点,然后关闭该文件,那么Excel就会清除你
的断点,而下次当你准备测试程序时,你将不得不再次设置你的断点。如果你需要推迟测试工作,
那么你可以使用不同的方式,简单的在你需要暂停程序的地方插入一个Stop语句。图13…8显示了
For…Next循环之前的Stop语句。当VB遇到Stop语句,它就会暂停过程StopExample的执行,屏幕会
显示中断模式下的代码窗口。尽管Stop语句和设置断点具有完全一样的效果,但是,它有一个弱点
——所有Stop语句都留在程序里,直到你一个一个清除它们。当你不再需要暂停程序时,你必须定
位并且清除所有的Stop语句。
图13…8 你可以在VBA过程代码的任何地方插入Stop语句,当程序到达Stop语句时就会暂停,并且出
现代码窗口,加亮该行
技巧13…3 在中断模式下在代码窗口内部工作
在中断模式下,你可以改变代码、添加新语句、每次执行一行语句、跳过代码行、设置下一条语句、
使用立即窗口、以及更多。当VB处于中断模式时,调试菜单上所有的选项都可用了。你可以通过按
下Esc,Ctrl+Break,或者通过设置断点,进入中断模式。
当你在中断模式下时,如果你更改某些代码,VBA将会提示你重新设置工程,显示如下错误信息:
“该操作将重新设置工程,继续吗?”你可以点击确定,终止程序执行并继续编辑你的代码,或者
点击取消,删除新变化并从中断点继续运行代码。要查看该错误的话,可以将程序进入中断模式,
然后更改变量的声明,当你按下F5恢复代码执行的时候,VBA就会提示你重新设置你的工程。
6。添加监视表达式
程序中的许多错误是由变量获得未预期的值导致的。如果某个过程使用了一个变量,在不同的地方
有不同的值,你可能想要停止程序查看该变量的当前值。VB提供了一个特别的监视窗口,允许你在
过程运行时密切注视变量或者表达式。
进行下述操作,给你的过程添加监视表达式:
1。 在代码窗口,选择你想要监视的变量
2。 选择调试…添加监视
屏幕上会显示添加监视对话框,如图13…9所示。
添加监视对话框包含三部分,描述在下表中:
表达式 显示你的过程中加亮变量的名称。如果你打开添加监视对话框时没有选择
254
… 页面 271…
变量名称,那么需要输入你想要监视的变量名称到表达式文字框里
上下文 在该节,你应该指明包含该变量的过程名称和该过程所在的模块名称
监视类型 明确如何监视该变量。如果你选择“监视表达式”选项按钮,那么你将在
中断模式下能够在监视窗口里查看该变量的值。当你选择“当监视值为真
时中断”选项按钮,那么当该变量值为真(非零)时VB将自动停止过程。
最后一个选项按钮,“当监视值改变时中断”,每当该变量或表达式的值改
变时,过程就会停止
图13…9 添加监视对话框允许你定义在VBA过程运行时监视的情况
你可以在运行过程之前或者在过程执行中断之后添加监视表达式。
断点和监视表达式之间的区别是断点总是将过程中断在某个特定的位置,而监视表达式则是当特定
情况(监视值为真中断或者监视值改变时中断)时中断过程。当你不确定变量在哪儿改变时,监视
是极其有用的。你可以简单地添加一个监视断点在某个变量上并正常运行过程,而不必在这么多行
代码里逐语句来找到变量在那里获取该特定的值。我们来看看这是如何实现的。
1。 准备如图13…10所示的过程
图13…10 使用监视窗口
过程WhatDate使用For…Next循环来计算将来x天后的日期。如果你运行该过程,你不会得到任何结
果,除非你在过程里插入下述指令:
MsgBox “In “ & x & “ days; it will be “ & NewDate
然而,这次,你不想一天一天地显示每一个日期。假如你想要当变量x等于160(译者:翻译时恰好
用到160这个数,原文是211)的时候停止该程序,换句话说,你想要知道现在160天后是哪一天。
255
… 页面 272…
要得到结果的话,你可以插入下述语句到过程里:
If x = 160 Then MsgBox 〃In 〃 & x & 〃 days it will be 〃 & NewDate
假设你想要不输入任何新语句来得到结果,你如何做呢?如果你添加了监视表达式的话,当满足特
定条件时,VB就会停止For…Next循环,然后,你就可以查看想要的变量值。
1。 选择调试…添加监视
2。 在表达式文字框里输入下述表达式:x=160
3。 在上下文部分,从过程下拉列表里选择WhatDate,从模块下拉列表里选择Breaks
4。 在监视类型部分,选择“当监视值为真时中断”选项按钮
5。 点击确定,关闭添加监视对话框,现在,你已经添加了你的第一个监视表达式
6。 在代码窗口,将光标放在变量curDate内部的任意地方
7。 选择调试…添加监视,并点击确定,设置缺省的监视类型
8。 在代码窗口,将光标放在变量newDate内部的任意地方
9。 选择调试…添加监视,并点击确定,设置缺省的监视类型
做完上面的步骤后,过程WhatDate包含了下述三个监视:
x = 160 当监视值为真时中断
curDate 监视表达式
newDate 监视表达式
10。 将光标放在过程WhatDate代码的任意地方,并且按下F5,VB在x=160的时候停下来了(见图
13…10)
注意,变量x在监视窗口的值和你在添加监视对话框里指定的值一样。另外,监视窗口显示了
变量curDate和newDate的值。该过程处于中断模式。你可以按F5继续或者你可以问另一个问题:
277天后是哪一天?下一步将示范如何做。
11。 选择调试…编辑监视,然后输入下述表达式:x=227。你可以通过双击监视窗口里的表达式,快
速显示编辑监视对话框
12。 点击确定,关闭编辑监视对话框。注意,现在监视窗口显示表达式的新值,现在x为False。
13。 按F5,当x值为227时过程再次停止。curDate的值相同,但是变量newDate现在有了一个新的值
——现在之后277天的日期。你可以再次改变表达式的值,或者结束该过程。
14。 按F5以完成该过程。当你的过程正在运行,并且监视表达式有值,监视窗口就会显示该监视表
达式的值,如果你在过程运行结束后打开监视窗口的话,那么你将看到,而不是
变量值了。换句话说,当监视表达式溢出上下文时,它没有值。
7。清除监视表达式
在监视窗口里,点击你要清除的表达式并且按下Delete。清除你先前定义的所有监视表达式。
8。使用快速监视
如果你想查看一个表达式的值,但是你还没有定义监视表达式,那么你可以使用快速监视(见图
13…11)
图13…11 快速监视对话框显示VBA过程里所选表达式的值
可以通过下述方法获取快速监视对话框:
… 在中断模式下,将光标放在你要监视的变量名称或者表达式内部
… 选择调试|快速监视,或者按下Shift+F9
快速监视对话框上面有个添加按钮,允许你在监视窗口里添加表达式。
确保过程WhatDate里不含有任何监视表达式,参见前面的章节有关如何从监视窗口清除监视表达式
的