按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
这时,你可以通过按F8或者选择调试…逐语句来一行一行地运行代码。
我们来看看下面一个方案,看看它是如何工作的。假设在过程ChangeCode的执行中下面的代码行会
出问题:
ActiveCell。Formula = 〃=VLookup(RC'1';Codes。xls!R1C1:R6C2;2)〃
1。 准备好如图13…2和13…3所示的电子表格。保存图13…2所示的数据为Chap13。xls,图13…3所示的
数据为Codes。xls。关闭文件Codes。xls。
图13…2 本文件中输入在D列的编号将会在过程ChangeCode中被显示于土13…3中的编号所代替
250
… 页面 267…
2。
图13…3 过程ChangeCode使用该编号表作查找目的
3。 激活文件Chap13。xls,切换到VB编辑器窗口
4。 使用属性窗口重新命名VBAProject(Chap13。xls)为Debugging
5。 插入模块到Debugging (Chap13。xls)工程,并且更改名Name属性为Breaks
6。 输入过程代码ChangeCode,如下所示:
Sub ChangeCode()
Workbooks。Open FileName:=〃C:Codes。xls〃 ‘将此处文件路径改为你的真实路径
Windows(〃Chap13。xls〃)。Activate
Columns(〃D:D〃)。Select
Selection。Insert Shift:=xlToRight
Range(〃D1〃)。Select
ActiveCell。Formula = 〃Code〃
Columns(〃D:D〃)。Select
Selection。SpecialCells(xlBlanks)。Select
ActiveCell。Formula = 〃=VLookup(RC'1';Codes。xls!R1C1:R6C2;2)〃
Selection。FillDown
With Columns(〃D:D〃)
。EntireColumn。AutoFit
。Select
End With
Selectionpy
Selection。PasteSpecial Paste:=xlValues
Rows(〃1:1〃)。Select
With Selection
。HorizontalAlignment = xlCenter
。VerticalAlignment = xlBottom
。Orientation = xlHorizontal
End With
Workbooks(〃Codes。xls〃)。Close
End Sub
7。 在过程ChangeCode里,点击下述语句行的任意地方:
ActiveCell。Formula = 〃=VLookup(RC'1';Codes。xls!R1C1:R6C2;2)〃
8。 按下F9(或者选择调试…切换断点)来在光标所在处设置一个断点。设置断点的另外一种方法
是点击你要暂停程序的代码左边的页边。同时,带断点的代码行显示为白字紫红底色(见图
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…
变量名�