3.4“代码”窗口
VBE的代码窗口可用来查看、修改录制的宏代码,更多的是用来编写VBA程序。工程中的每个对象都有一个与之关联的代码窗口。
3.4.1 代码窗口的组成
因工程中每个对象都有自己的代码窗口,所以VBE的代码窗口非常多。用户可以最小化、最大化、隐藏和重新排列这些窗口。VBE代码窗口如图3-17所示。
图3-17 VBE代码窗口
代码窗口的顶部有两个下拉列表框:左侧为“对象”下拉列表框,用来在当前模块各对象之间切换,可查看各对象不同事件的代码;右侧为“过程/事件”下拉列表框,可快速查看一个指定对象过程或事件过程的代码,光标将会跳到那个过程的第一行处。
位于代码窗口右上角的“分隔条”与Excel窗口的分隔条功能相同,拖动该分隔条可将代码窗口分为两个窗格,如图3-18所示。这样可以查看长过程中的不同部分,或在每个窗格中查看不同的过程。用户也可方便地在同一个模块内进行代码片断的复制。
图3-18 分离代码窗口
拖动窗格分隔条到代码窗口顶部,即可返回到一个以窗格显示的模式。
在修改和调试代码时,边界标识条将显示一些有帮助的指示图标。在代码窗口的左下方有两个按钮,其功能如下。
• 过程视图:在代码窗口中一次只显示一个过程的代码。要查看其他过程的代码,则需要通过“过程/事件”下拉列表框选择过程。
• 全模块视图:在代码窗口中显示所选模块的所有过程,使用右侧的垂直滚动条可以在代码区中滚动。
3.4.2 编辑代码
一个VBA模块可以存储以下4类代码。
• 声明:不可执行的代码,用来给VBA提供常数、变量或过程的定义信息,并且指定其特性,比如数据类型。
• Sub过程:完成某项特定任务的VBA代码集合,不能明确地返回值。
• Function过程:完成某项特定任务的VBA代码集合,可返回一个运算结果。其类似于Excel的工作表函数,例如SUM。
• 属性过程:类模块中的特殊过程,可创建并操作类的自定义属性。
VBA的代码必须位于某个过程中,一般可以采用三种方法来添加VBA代码。
• 录制宏:在Excel环境中录制宏时,将自动生成VBA代码。
• 手工输入:在VBE的“代码”窗口中逐条语句地输入VBA代码。
• 从其他地方粘贴:从其他的模块中复制代码,再粘贴到当前模块中。
通过录制宏生成的代码,因为是由Excel自动生成的,所以排序规范,也不会出现语法错误。下面主要介绍手工输入代码时需要处理的一些问题。
在输入或编辑VBA代码时,可能会出现一些错误,例如单词拼写错误、符号输入错误等,这些称为语法错误。当用户输入完一行代码后按“Enter”键时,VBE将对当前行代码进行语法检查,发现语法错误时,将弹出一个错误对话框,并将错误代码行变为红色。如图3-19所示,在MsgBox中少输入了一个右括号“)”,这时按“Enter”键将弹出错误对话框。单击对话框中的“帮助”按钮,可查看错误原因。
图3-19 “错误”对话框
注意:VBE可发现大多数的语法错误,并马上提示用户。但仍然有很多语法错误只有在运行程序时才能被发现。
除语法错误外,VBA代码中还可能有两种错误:逻辑错误和运行时错误。
• 逻辑错误:逻辑错误不会发出明确的错误信息,程序能正常运行,但运行结果是错误的。这类错误是最难排查的。
• 运行时错误:发生在程序运行期间,一般是遇到开发者在编写程序时没有预料到的情况。例如读取磁盘中并不存在的一个文件时,就会发生运行时错误。
3.4.3 编辑代码快捷助手
VBE的代码窗口像一个专门的文字处理软件,提供了许多便于编写VBA代码的快捷功能。
1.“编辑”工具栏
一般情况下,“编辑”工具栏是隐藏的。可选择“视图”|“工具栏”|“编辑”命令将其显示出来。如图3-20所示的“编辑”工具栏上有很多按钮,可帮助用户快速地输入VBA代码。
图3-20 “编辑”工具栏
“编辑”工具栏中各按钮的功能如下。
• 属性/方法列表:在代码窗口中打开列表框,其中含有前面带有句点(.)的该对象可用的属性及方法。
• 常数列表:在代码窗口中打开一个列表框,其中含有所输入属性的可选常数及前面带有等号(=)的常数。
• 快速信息:根据指针所在的函数、方法或过程的名称提供变量、函数、方法或过程的语法。
• 参数信息:在代码窗口中显示快捷菜单,其中包含指针所在函数参数的有关信息。
• 自动完成关键字:接收Visual Basic在所输入字之后自动添加的字符。
• 缩进:将所有选择的程序行移到下一个定位点。
• 凸出:将所有选择的程序行移到前一个定位点。
• 切换断点:在当前的程序行上设置或删除一个断点。
• 设置注释块:在所选文本区块的每一行开头处添加一个注释字符。
• 解除注释块:在所选文本区块的每一行处删除注释字符。
• 切换书签:在程序窗口中使用的程序行添加或删除书签。
• 下一个书签:将焦点移到书签堆栈中的下一个书签。
• 上一个书签:将焦点移到书签堆栈中的上一个书签。
• 清除所有书签:删除所有书签。
在Excel中编写VBA代码时,将使用到数以千计的指令、函数、对象及其方法和属性等。要用户记住所有的这些单词是十分困难的,VBE的智能感应技术可以向用户提供这方面的帮助。
2.属性/方法列表
Excel中包括很多对象,每个对象都包含许多属性和方法。在代码窗口中输入对象名称和一个句点时,可能会弹出一个下拉列表,该列表中列出了对象所有可用的属性和方法,如图3-21所示。
图3-21 属性/方法列表
打开“属性/方法列表”后,可用鼠标拖动右侧的滚动条查找所要的属性或方法,找到后双击该项目,可将其插入到代码中。也可不理会弹出的列表,在句点后面接着输入属性或方法的前几个字母。当VBE突出显示需要的项目时,按“Enter”键可插入该项目到代码中并开始新的一行(可以按“Tab”键插入项目,并在当前行继续输入代码)。
按“Esc”键可关闭列表框,并且不插入任何内容到代码窗口中。当按“Esc”键取消了弹出的列表框后,对同样的对象VBE将不会再弹出该列表框,可使用以下方法再次显示该列表框。
• 单击“编辑”工具栏中的“属性/方法列表”按钮。
• 按“Ctrl+J”组合键。
• 在代码窗口中的对象代码处单击鼠标右键,在弹出的快捷菜单中选择“属性/方法列表”命令。
3.常数列表
有关常数的概念将在本书的第5章介绍,这里只需要理解Excel中的常数是指一组固定的值,Excel的常数名总是以“xl”开头的。
在Excel中,更新共享工作簿时解决冲突的方式共有三种,分别对应三个常数名,这些常数名很长,不容易记住。这时,可以使用VBE提供的常数列表来帮助用户输入。
例如:设置更新共享工作簿时解决冲突的方式为“总接受本地用户所做的修改”,就需要将工作簿的ConflictResolution属性设置为常数“xlLocalSessionChanges”。通过常数列表输入的方法如下:
(1)在代码窗口中输入以下代码:
activeworkbook.ConflictResolution=
(2)输入等号(=)后,VBE可能会自动弹出如图3-22所示的常数列表,供用户选择需要设置的值。
图3-22 常数列表
(3)双击“xlLocalSessionChanges”即可将其输入到代码中。
按“Esc”键可关闭该列表框,单击工具栏中的“常数列表”按钮(或按“Ctrl+Shift+J”组合键)将再次显示常数列表。
4.快速信息
当在代码窗口中选择了VBA指令、函数、方法、过程名或常数后,再单击“编辑”工具栏上的“快速信息”按钮(或按“Ctrl+I”组合键)时,VBA将会显示所选项目的语法或常数的值。如图3-23所示为选中VBA常数后按“Ctrl+I”组合键的效果(显示出该常数的值)。
图3-23 快速信息
5.参数信息
Excel的函数一般都需要一个或几个参数。在VBE中输入VBA函数时,如果该函数需要参数,在输入函数名和左括号“(”后,在光标下将显示一个提示框。该提示框显示函数需要的参数,如图3-24所示。在参数信息中列出了参数的顺序,以及每个参数的数据类型。
图3-24 参数信息
6.自动完成关键字
在代码窗口中输入一个关键字的前几个字母,然后单击“编辑”工具栏上的“自动完成关键字”按钮(或按“Ctrl+空格”组合键),VBE将自动输入该关键字的剩余字母。如果输入的前几个字母可适用于多个关键字,VBE将弹出一个列表框供用户选择。例如,在代码窗口中输入以下几个字母:
activewo
接着单击“自动完成关键字”按钮,VBE将自动输入剩余的字母,得到整个关键字:
ActiveWorkbook
如果只输入前三个字母“act”,再单击“自动完成关键字”按钮,VBE将弹出如图3-25所示的列表,供用户选择。
图3-25 自动完成关键字
使用“自动完成关键字”功能,可加快代码的编写速度,并减少代码输入的错误。
注意:在Windows 7中文版中,默认情况下,“Ctrl+空格”为打开/关闭中文输入法的快捷键。