从零开始学Excel VBA
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第2篇Excel VBA基础篇

第4章 Visual Basic编辑器简介

Visual Basic编辑器是VBA的开发环境,Visual Basic编辑器中可以将VBA的各种功能有机结合在一起,实现电子表格处理自动化。本章将学习的主要内容有:

❑ 了解Visual Basic编辑器的发展及其在实际应用中的特点。

❑ 掌握Visual Basic编辑器的组成。

❑ 掌握Visual Basic在实际开发过程中各种内置工具的使用方法。

4.1 Visual Basic编辑器概述

Visual Basic中的Visual指可见的、可视化,Basic的全称是Beginners all purpose symbolic instruction code,即初始者通用符号指令代码语言。Visual Basic编辑器是以BASIC语言为基础开发图形用户界面的可视化编程工具,在开发过程中不需要编写大量的代码去设置图形界面的位置、大小等属性,只需在Visual Basic开发工具中用鼠标将相应的对象元素(例如按钮)拖放到窗口上的相应位置即可。

4.1.1 Visual Basic编辑器的发展过程

1991年Visual Basic 1.0诞生,其功能非常简单,其中添加了VBX控件,而不是我们熟悉的OCX控件,缺少数据库支持,而且此时的VB还是一种解释型语言,还不能生成.exe文件。但其最大的创新点就是加入了事件驱动模型和可视化开发。

1992年Microsoft公司推出了Visual Basic 2.0,在此版本中加入了对象型变量和最原始的“继承”概念,以及OLE和简单的数据访问功能,同时还有大量的第3方控件。1993年Visual Basic 3.0发布,其中新增加了对数据库的支持,同时还增加了许多金融函数,使开发人员可以开发出像Windows操作系统一样的窗口。

1995年Visual Basic 4.0发布,其是一场革命,Visual Basic 4.0所用的语言换成了Visual Basic for Application,这一切导致Visual Basic 3.0以上版本很难移植到Visual Basic 4.0中,但不可否认的是Visual Basic 4.0为Visual Basic成为一种COM语言奠定了基础。

1997年Visual Basic 5.0发布,此版本的Visual Basic为COM提供了最强有力的支持,同时微软还加入了一个本地代码编译器,使应用程序的效率大大提升,同时也提供了更多的面向对象的支持,允许开发人员创建事件和接口,改进了类模块,支持创建自己的集合类、ActiveX控件、进程内的COM DLL组件及在浏览器中运行的ActiveX文档。1998年Visual Basic 6.0发布,Visual Basic 6.0已经是一款非常成熟和稳定的开发系统,在实际应用中非常广泛。

从2002年开始.net架构的开发环境开始发布,目前最新的版本是Visual studio 2008。

4.1.2 Visual Basic编辑器的特点

Visual Basic编辑器之所以获得如此广泛的应用,在于其本身有众多的符合实际需求的优点。

(1)Visual Basic编辑器采用了面向对象的设计思想,使VBA程序设计更加符合开发者思考问题的方式,程序设计的过程也因面向对象的应用而变得简单。

(2)在Windows操作系统中,程序都以事件驱动的方式工作,在面向对象的机制下,每个对象可以响应多个事件,程序设计者可根据不同事件设计相应的代码。事件代码编辑完成后,就等待事件的触发,事件可以由用户的某些操作触发,也可以由系统触发,例如用户单击某个按钮,将触发按钮对象的Click事件。

(3)Visual Basic编辑器中有集成的开发环境,可在此环境中设计界面,编写代码,调试程序,打包程序,制作可执行文件。另外Visual Basic编辑器开发环境简单易学,在使用上同于Windows操作系统。

(4)Visual Basic编辑器具有强大的数据访问能力,其中集成了大量的数据访问控件,便于开发者进行数据连接、访问、处理。同时Visual Basic编辑器也支持对象嵌入和链接技术,有利于开发集成图像、声音、动画、字处理等程序。

(5)Visual Basic编辑器中具有多种向导提示工具,例如应用程序向导、数据对象向导、安装向导等,可以快速地创建不同类型、不同功能的应用程序。同时程序中还提供了全面的帮助功能,用户可以随时找到自己需要的帮助信息和相关的示例代码。

4.2 构建VBA工作环境

在了解了Visual Basic编辑器的发展历史和特点后,读者就想掌握使用Visual Basic编辑器,不过在学习之前,需要确定Visual Basic编辑器是否安装。本节将介绍安装Visual Basic开发环境和VBA帮助信息。

4.2.1 安装VBA开发环境

如果在安装Microsoft Office 2007系列办公软件时,采用的是默认安装方式,那在Excel 2007中VBA的开发环境就自动被安装好了。若选择的是自定义安装方式,则需要另外安装VBA开发环境。

(1)正常启动计算机后,选择“开始”→“控制面板”→“添加或删除程序”命令,其操作过程如图4.1所示。

(2)在右侧列表中,选择如图4.2所示的“Microsoft Office Professional Plus 2007”列表项。

(3)单击此项下的“更改”按钮,弹出如图4.3所示的“Microsoft Office Professional Plus 2007”窗口。

(4)选择“添加或删除功能”单选按钮。

(5)单击右下角的“继续”按钮,进入下一窗口,如图4.4所示。

(6)单击树形列表中的“Office共享功能”。

(7)在展开的树形列表中,选择如图4.4所示的“Visual Basic for Application”项。

(8)单击窗口右下角的“继续”按钮后,弹出如图4.5所示的配置窗口,程序进入配置状态。待配置完成后,就可以使用Visual Basic编辑器了。

Tips

若在配置过程中,需要Office光盘,则需要插入Microsoft Office 2007安装光盘。

图4.1 添加或删除程序菜单项

图4.2 添加或删除程序窗口

图4.3 Microsoft Office Professional Plus 2007窗口

图4.4 选中Visual Basic for Application项

图4.5 配置VBA窗口

4.2.2 安装VBA帮助文档

图4.6 Excel帮助文档

帮助文档对于VBA的使用有着重要作用,特别是其中的示例程序,对于程序开发者有重要示范作用。在Visual Basic编辑器中,帮助文档有2种,即Microsoft Visual Basic帮助和Web上的MSDN帮助文档,通常使用的是前者,选择Visual Basic编辑器中的“帮助”菜单,在下拉菜单中单击“Microsoft Visual Basic帮助”后,弹出如图4.6所示的Excel帮助窗口。若本机上没有帮助软件,则会弹出提示信息,用户只需将Microsoft Office 2007安装光盘放入光驱,依次单击“继续”按钮,即可安装完成。

4.3 操作Visual Basic编辑器

在Visual Basic编辑器安装完成后就可以学习VBA开发环境的应用了。本节将介绍如何启动VBA开发环境,同时要对VBA开发环境的构成做一个详细介绍,若默认的开发环境不适合用户,用户可以自定义开发环境。

4.3.1 启动Visual Basic编辑器

对于任何一个软件,只有当程序处于运行状态,用户才能够使用。在Excel 2007中,由于Excel VBA是运行在Excel 2007的平台之上,需先启动Excel 2007应用程序后才能启动Visual Basic,其操作步骤如下所述。

(1)启动Excel 2007应用程序,弹出Excel 2007应用程序窗口。

(2)选择“开发工具”选项卡。

(3)在“代码”组中单击“Visual Basic”按钮后,即可启动Visual Basic编辑器。启动后的Visual Basic编辑器如图4.7所示。

图4.7 Visual Basic编辑器窗口

4.3.2 认识Visual Basic编辑器窗口

从图4.7中可以看到,Visual Basic编辑器类似于普通的操作系统窗口,但其中多出了两个窗口,此处即为Visual Basic编辑器与普通窗口的不同。Visual Basic编辑器中包含了标题栏、菜单栏、工具栏、工程资源管理器、属性窗口、代码窗口等,编辑器中各部分对应关系如图4.8所示。

4.3.3 退出Visual Basic编辑器

程序设计完成后,要正常关闭应用程序。在Excel 2007中,退出Visual Basic编辑器有两种方法。

(1)选择“文件”→“关闭并回到Microsoft Excel”命令,如图4.9所示,退出Visual Basic编辑器。

(2)单击Visual Basic窗口右上角的窗口控制按钮后,即可退出Visual Basic编辑器。

图4.8 Visual Basic编辑器的组成

图4.9 从“文件”菜单中退出Visual Basic编辑器

4.4 使用Visual Basic编辑器中的窗口

在Visual Basic编辑器中,有很多窗口,并且同时位于Visual Basic编辑器中。在默认设置下,启动Visual Basic编辑器时,有两个窗口,分别为工程资源管理器窗口和属性窗口。在Visual Basic中还有代码窗口、对象浏览器窗口、立即窗口、本地窗口、监视窗口等,本节将详细介绍这些窗口的功能及应用。

4.4.1 使用代码窗口

代码窗口用于编写、显示及编辑Visual Basic代码。打开各模块的代码窗口后,可以查看不同窗体、模块、工作簿、工作表、窗体控件中对应的代码,并且在它们之间做复制及粘贴的动作。代码窗口中包含标题栏、“对象“下拉列表框、“过程/事件”下拉列表框、代码编辑区等,其名称与窗口对应关系如图4.10所示。

图4.10 代码窗口

默认设置中,代码窗口通常不会显示。在Visual Basic编辑器中有两种方法打开代码窗口。

(1)选择Visual Basic编辑器菜单栏中的“视图”→“代码窗口”命令,即可弹出代码窗口。

(2)双击工程资源管理器中的模块或Excel对象,或单击鼠标右键选中某一模块或对象,弹出如图4.11所示的快捷菜单,选择“查看代码”命令。

Tips

在代码编辑过程中,可以将所有代码拖动到当前代码窗口中的不同位置或者其他的代码窗口、立即窗口及监视窗口中,如果这些代码是无用的,也可将其直接拖放到回收站中。

在代码窗口中,“对象”下拉列表框用于显示所选对象的名称,单击“对象”下拉列表框右侧的下三角按钮,可浏览此窗体中的所有对象;“过程/事件”下拉列表框显示出当前对象所具有的全部事件,当选择一个事件后,代码编辑窗口会显示所有与此事件相关的程序代码,如图4.12所示,选择Open事件,代码编辑窗口会显示与Open事件对应的程序代码。

Tips

如果在“对象”下拉列表框中显示的是“通用”,则“过程/事件”下拉列表框会显示“声明”,在代码编辑区会显示出此窗体中所有声明,以及为此窗体所创建的常规过程。如果正在编辑模块中的代码,则“过程/事件”下拉列表框中会显示当前正在编辑的过程名。

拆分栏可以将同一个过程的代码,在两个不同的窗口中显示。对于浏览过程比较长的代码可以在同一时间将其分别显示在不同的窗口中,便于查看分析。在使用过程中,将“拆分栏”按钮向下拖放或双击“拆分栏”按钮可以将代码编辑区分为两个编辑区,如图4.13所示。每个编辑区中都有各自的滚动条,同一时间只有一个编辑区获取焦点,运行程序时,以当前拥有焦点的编辑区代码为准。将拆分栏拖放到窗口的顶部或底部,或者再次双击拆分栏,可以关闭一个编辑区,留下一个编辑区。

图4.11 查看代码

图4.12 Open事件对应代码

图4.13 拆分栏效果

编辑窗口左侧的灰色区域会显示出边界标识,在编辑代码期间,页边距指示区可提供一些视觉上的帮助。在代码窗口的左下角有两个图标分别为“过程查看”图标和“全模块查看”图标,其中“过程查看”图标指显示所选的过程,并且在同一时间只能在代码窗口中显示所选的一个过程;“全模块”查看方式将会显示该模块内的所有代码。

4.4.2 使用对象浏览器

在对象浏览器中可以查看工程中所有可获得的对象,并可查看此对象的属性、方法及事件。一个工程中经常会引用对象库中的过程及常数,在对象浏览器中也可以查看此类过程和常数,也可以搜索和使用用户创建的对象,还可以查看其他应用程序的对象。对象浏览器的窗口如图4.14所示。

图4.14 “对象浏览器”窗口

选择“视图”→“对象浏览器”命令,就可以打开如图4.14所示的对象浏览器。在对象浏览器窗口中,可以运用其查找功能,提取用户需要的对象信息,在对象浏览器的底部是对象说明信息,当用户选择类或成员列表中的某一列表项时,在底部的信息框中会显示该对象或成员的相关说明信息,如图4.15所示。

搜索对象帮助信息的操作步骤如下所述。

(1)在对象浏览器的“搜索”文本框中输入需要的对象名。

(2)单击“搜索文本框右侧”的“查找”按钮,就会在类列表和成员列表中显示所需的对象及属性,“查找”按钮的右边是“显示/隐藏”按钮,单击此按钮可以显示或隐藏搜索结果。例如查找Excel中对象Application,其操作步骤如下所述。

(1)单击“工程/库”右侧的下三角按钮,在下拉列表框中,选择“Excel”列表项。

(2)在“搜索”文本框中输入Application后,单击“查找”按钮,弹出如图4.16所示的查询结果。

(3)选择相应列表项即可获取相关的信息。

图4.15 说明信息栏

图4.16 查找Application信息

4.4.3 使用立即窗口

立即窗口有一项功能类似于Windows操作系统中的命令行窗口,在其输入VBA指令后按“Enter”键就可直接执行,并且在VBA窗口中可以查看程序执行过程中的中间计算结果,也可将程序的计算结果输出到立即窗口中。默认设置中,立即窗口不会显示。打开立即窗口的操作步骤如下所述。

(1)选择“视图”→“立即窗口”命令,弹出如图4.17所示的立即窗口。

(2)在立即窗口中查看变量的中间计算结果,需要首先在所要查看变量的下一语句前设置断点,然后执行程序,待到程序执行至断点处暂停时,在立即窗口中输入“? 变量名或表达式”,按下“Enter”键,在立即窗口中将显示变量或表达式的值。

【例4-1】在Visual Basic编辑器中的代码窗口中,录入如下代码。其操作步骤如下所述。

(1)在代码窗口中将光标定位于MsgBox语句。

(2)在Visual Basic编辑器中,选择“调试”→“切换断点”命令,在如图4.18所示的代码窗口的MsgBox语句前多了一个红点,此红点就表示断点。

图4.17 立即窗口

图4.18 断点示意图

(3)单击标准工具栏上的“运行”按钮

(4)选择“视图”→“立即窗口”命令,在弹出的立即窗口中输入“? sum”,按下“Enter”键。sum值如图4.19所示。

        01  Private Sub测试立即窗口()
        02   Dim x As Integer
        03   Dim y As Integer
        04   Dim sum As Integer
        05   x = 5
        06   y = 7
        07   sum = x + y                    `求解两数的和
        08   MsgBox sum, vbOKOnly, "qiuhe"
        09   sum = sum * 2                  `求sum的二倍值
        10  End Sub

【代码解析】第2~4行用于声明3个变量,第5~6行用于给各变量赋值,第7行和第9行用于给sum变量赋值。第8行用于计算sum的2倍值。

也可以将计算的结果值直接输出到立即窗口。此时需要在程序代码中添加“Debug.Print变量名或表达式”语句,此种方法不需要为程序中添加断点,也不需要在程序中输入指令语句,当程序运行后,变量或表达式的结果值将会输出到立即窗口中。以例4-1 的程序为例,删除MsgBox语句,在其位置上插入“Debug.Print "sum = " & sum, "x = " & x, "y = " & y”语句,运行程序后直接得到Debug.Print语句,如图4.20所示。

Tips

Debug.Print语句是专用于将计算结果输出到立即窗口的。

图4.19 查看sum值示意图

图4.20 测试Debug.Print语句

Tips

立即窗口中的代码是不能存储的,在中断模式下,立即窗口中的语句,是根据显示在过程框的内容或范围来执行的,显示的对应变量值也是在此范围内的变量值。

4.4.4 使用本地窗口

本地窗口的主要用途是调试程序,当程序代码编辑完成之后,调试程序的过程中,本地窗口可自动显示出所有在当前过程中的变量声明及变量值,如果本地窗口可见,每当从执行方式切换到中断模式时,本地窗口就会自动重建,其中的变量声明及变量值会重新刷新一次。

选择“视图”→“本地窗口”命令,即弹出如图4.21所示的本地窗口,本地窗口包含了“调用堆栈”按钮和表达式相关信息列表。表达式相关信息列表中包括了“表达式”、“值”、“类型”3列,分别用于显示表达式的构成、数值和数据类型。

图4.21 本地窗口

表达式一列显示的是表达式的名称。列表中的第1个变量能以树形目录形式显示所有模块层次变量,对于类模块变量,会定义一个系统变量<Me>;对于常规模块,显示的是当前模块的模块名称;拥有子变量的变量单击其左侧的“”标签可以将其子变量展开,同时原来的“”标签变为“”标签;单击“”标签,子变量将被折叠,同时“”标签变为“”标签。值一列显示的是本行表达式的值,所有的数值变量都有一个值,而字符串类型的变量可以是空值,类型一列显示的是变量的数据类型。

Tips

不能在本地窗口中访问程序中的全局变量及其他工程中的变量,同时表达式列是不能编辑的。

单击“调用堆栈”按钮,会弹出如图4.22所示的“调用堆栈”对话框,在此对话框中显示函数的调用顺序,单击相应的过程或函数名,再单击列表框右侧的“显示”按钮后,“调用堆栈”对话框关闭,窗口切换至代码窗口,此时在代码窗口显示的是在“调用堆栈”对话框中所选取的过程或函数代码。

【例4-2】此例是让读者学会使用本地窗口,设计一个程序,此程序包括一个过程test和一个函数add,过程test为测试过程,函数add完成两数相加,并返回求和的结果。在过程test中调用函数add。在函数add最后一个语句处设置断点。操作步骤如下所述。

(1)用鼠标右键单击 “工程资源管理”→“插入模块”窗口,弹出如图4.22所示的窗口。

(2)在模块1中输入函数add的代码,将光标定位于End Function语句处。

        01  Public Function add(a As Integer, b As Integer)
        02   Dim c As Integer
        03   c = a + b      '求两个数的和
        04   add = c       '确定返回值
        05  End Function

(3)选择“调试”→“切换断点”命令。

(4)执行前述操作,在工程资源管理器中插入模块2,在其代码窗口中输入过程test,完成代码编辑。

        06  Sub test()
        07   Dim x As Integer
        08   Dim y As Integer
        09   Dim z As Integer
        10   x = 1          `初始化变量
        11   y = 2
        12   z = add(x, y)   `调用add函数
        13  End Sub

(5)将光标定位于模块2代码窗口中,单击“执行”按钮运行程序,程序运行到断点处。

(6)选择“视图”→“本地窗口”命令,弹出如图4.23所示的窗口,此时本地窗口中显示了函数add中的各变量的值。

图4.22 “调用堆栈”对话框

图4.23 本地窗口——函数add变量

(7)单击本地窗口上“调用堆栈”按钮,弹出“调用堆栈”窗口。

(8)选择其中的“VBProject.模块2.test”,如图4.24所示。

(9)单击“显示”按钮,此时本地窗口中显示过程test中所有变量的值如图4.25所示。

【代码解析】第1~5行是一个求两个数和的函数,第7~9行声明了一个变量,第10~11行为两个变量赋值,第12行调用求和函数计算两个数的和。

图4.24 调用堆栈窗口

图4.25 本地窗口——过程test变量

Tips

如果表达式或值一列比较长,而所在的列表无法正常显示完整的数据时,可单击标题栏的最大化按钮最大化本地窗口,或者将光标定位于各列之间的分界线处,拖动鼠标,加宽被遮盖的数据列即可。

4.4.5 使用监视窗口

监视窗口是调试程序时的得力工具,本地窗口仅能显示本模块内部的局部变量,并且不能编辑表达式,不能由用户随意查看自己所需要的表达式的值。在监视窗口中用户可以根据需要添加监视表达式,当监视表达式添加后,监视窗口就会显示相应的表达式的值。

在Visual Basic编辑器中,选择“视图”菜单,在弹出的下拉菜单中选择“监视窗口”命令,弹出如图4.26所示的监视窗口。监视窗口包含了“表达式”、“值”、“类型”、“上下文”4列,其中表达式指用户输入的需要监视其值的表达式;值是程序由运行状态切换成中断模式时监视表达式的值;类型指所添加的表达式的类型;上下文指表达式所在模块。若要使用监视窗口,需要按下述步骤操作。

(1)参照例4-1的方法为应用程序设置断点。

(2)运行程序,当程序运行至断点处时,程序由运行状态变为中断状态。

(3)添加监视表达式,在监视窗口就可以显示监视表达式的值。查看例4-2 中表达式的值,保持例4-2中设置的断点,单击“执行”按钮,程序运行至断点处。

(4)选择“调试”→“添加监视” 命令,弹出如图4.27所示的“添加监视”对话框。

图4.26 监视窗口

图4.27 “添加监视”对话框

(5)表达式下的文本框用于输入监视表达式,如果在打开“添加监视”对话框之前在代码区选择所需查看的表达式的值,此时在文本框中将显示所选取的表达式的值,若预先选择表达式,则可以在此文本框中输入,此例中输入“a+b”;上下文一组,用于设置表达式的计算范围,此例中选择过程add和模块1。

Tips

在“上下文”组的过程和模块下拉菜单中,要选择最小的范围。由于监视表达式设置好后,在程序的运行期间,对表达式的值是实时监视的,程序每执行一步都会使其重新计算监视表达式的值,如果选择所有过程或所有模块,使上下文范围变大,程序执行速度显著下降。

“监视类型”是在程序执行时,指定系统如何响应监视表达式。如果需要显示此监视表达式的值,选择“监视表达式”单选按钮;如果需要在此表达式为True时中断程序执行,则选择“当监视值为真时中断”单选按钮;如果需要在此表达式的值发生改变时中断程序执行,则选择“当监视值改变时中断”单选按钮。此例中就选择“监视表达式”一项。单击“确定”按钮,完成添加监视表达式的设置,此时监视窗口中显示结果如图4.28所示。

Tips

对监视表达式的添加、编辑、删除也可以在监视窗口中进行设置。用鼠标右键单击监视窗口,弹出如图4.29所示的快捷菜单,即可看到“添加监视”、“编辑监视”、“删除监视”3个菜单项。

图4.28 a + b表达式的值

图4.29 编辑监视表达式

4.4.6 属性窗口

属性窗口的主要功能是显示所选择对象的所有属性信息,在程序设计过程中可以根据需要设置属性的值,当前正在编辑的属性会以蓝底白字高亮显示;如果在用户设计的窗体中选择了多个控件,属性窗口会列出所有被选择控件的全部属性。

在默认设置中,属性窗口是显示的,如果其没有显示,可按如下步骤打开属性窗口。

选择“视图属性窗口”命令,即可显示如图4.30所示的属性窗口。属性窗口中包含了“对象”下拉列表框和属性列表。“对象”下拉列表框中显示的是当前所选的对象,如果同时选取了多个对象,“对象”下拉列表框将显示第1个选择的对象,但属性列表会显示所有对象的属性。

Tips

“对象”下拉列表框中只能显示当前正在使用的窗体中的对象。

属性列表的显示分为按字母顺序显示和按分类显示,在属性列表上分别有“按字母序”选项卡和“按分类序”选项卡,可根据需要选取显示的方式。按字母序是按字母顺序显示当前对象的所有属性,选择属性名后可直接输入或直接设定其值。按分类序是按对象所具有的性质将其属性进行分类,例如对于窗体对象而言,其属性可分为外观类、行为类、图片类、位置类、滚动类等,单击类别前的“”或“”可以展开或折叠类别内部属性。此种显示方式可以在开发程序时,为设置属性提供方便。

图4.30 属性窗口

4.4.7 使用工程资源管理器

工程资源管理器是以分层列表的形式显示当前工程中的所有对象及被该工程所引用的所有工程。使用工程资源管理器可以显示浏览当前工程的所有Microsoft Excel对象、窗体、模块等。选择“视图”菜单,弹出下拉菜单,单击其中的工程资源管理器,即可打开如图4.31所示的“工程-VBAProject”窗口。

在工程资源管理器窗口上有3个按钮,分别为“查看代码”、“查看对象”、“切换文件夹”,在工程资源管理器中,首先选择一个对象,单击“查看代码”,可以查看该对象所对应的代码,如单击“查看对象”按钮,如果选择对象是Microsoft Excel对象或模块对象,则会在代码窗口中显示该对象所对应的代码,如果选择的对象是窗体,则会显示如图4.32所示的窗体设计窗口。单击“切换文件夹”按钮会在不同文件夹之间转换。

图4.31 工程-VBAProject窗口

在资源列表中,Microsoft Excel对象文件夹下列出了所有打开的工作表(sheet1、sheet2等)对象和工作簿(ThisWorkbook)对象,不同的程序代码存入不同的对象中,例如工作表事件代码存入工作表对象中,为工作簿设计的代码放入工作簿对象中。

窗体文件夹下列出了用户设计的窗体的所有窗体,其作用是构成用户界面,用户设计的窗体和控件事件程序都会保存在窗体中。模块主要是用于开发者存放程序代码,除了窗体、控件、工作簿、工作表对象的程序代码外,所有的程序代码都保存在模式块中。宏的代码就存放在模块中。类模块允许开发者创建对象。

调试简单的程序时,在工程资源管理器窗口中的任意位置单击鼠标右键,在弹出的快捷菜单中,选择“插入”命令,弹出下一级快捷菜单,选择其中的“模块”命令,可插入模块,同时弹出代码窗口,可在其中编辑代码进行调试程序。

为方便使用,可以更改模块名,在工程资源管理器中,单击需要改名的模块(例如模块1),按下 “F4”键,弹出如图4.33所示的“属性窗口”;将光标定位于属性窗口中“名称”列表的后面,删除“模块1”,输入新模块名,完成更改模块名。

图4.32 窗体设计窗口

图4.33 属性窗口

图4.34 移除模块提示信息

当模块不再需要时,可将其移除。在工程资源管理器中用鼠标右键单击需要移除的模块,在弹出的快捷菜单中,选择“移除模块1”命令,弹出图4.34所示的对话框,单击“否”按钮,即可将该模块彻底删除。

4.5 调试VBA程序

一个程序编写完成以后,需要试运行,以确认程序的正确性。在一个程序的制作中,70%的时间是花在程序调试上。初步编写的程序在逻辑上或语法上可能存在不合要求的方面,所以需要调试程序,填补程序的各个漏洞。本节将介绍调试VBA程序的方法。

4.5.1 使用调试工具栏

调试工具栏是调试过程中必备的调试工具,使用调试工具栏可以运行程序、暂停程序执行、设置断点、重置工程、逐语句执行、逐过程执行,同时对于调试过程中所需的各种辅助窗口提供相关的链接按钮。

默认设置中,调试工具栏不会显示,有两种方法可显示调试工具栏。

(1)选择“视图”→“工具栏”→“调试”命令,弹出调试工具栏对话框。

(2)用鼠标右键单击工具栏位置,弹出如图4.35所示的快捷菜单,选择其中的“调试”菜单项即可。调试工具栏如图4.36所示。

图4.35 工具栏

图4.36 调试工具栏

在调试工具栏中,“设计模式”是一种状态,即工程中的过程代码不能执行且来源于主应用程序或工程中的事件不执行的时候。单击此按钮可在设计模式状态与正常状态之间转换。单击“运行”按钮是指运行过程和窗体或运行宏,如果指针在一个过程中,则运行当前过程,如果当前有处理激活状态的窗体,则运行窗体,如果既没有过程也没有窗体,则运行宏。“中断”指使正在运行的程序暂停执行。

“重置”按钮用于重置工程,清除当前堆栈及模块级变量。“逐语句”按钮指程序运行时,以语句为执行单位,一次执行一个语句。“逐过程”按钮指程序运行时,以过程为单位,一次执行一个过程。“跳出”按钮指跳出当前正在运行的过程,执行后续的程序。单击“本地窗口”、“立即窗口”、“监视窗口”按钮可分别显示本地窗口、立即窗口、监视窗口。

“快速监视”按钮用于快速获取当前所选定的表达式的值。“调用堆栈”按钮用于显示“调用”对话框,在其中可列出当前已开始运行但尚未完成的过程的调用。在调试工具栏关闭按钮的左侧有个工具栏选项按钮,其可设置调试工具栏中显示的按钮数目。

图4.37 添加或删除调试工具栏按钮

(1)单击工具栏上的选项按钮,弹出下拉菜单。

(2)在下拉菜单中选择“添加或删除按钮”→“调试”命令,弹出如图4.37所示的快捷菜单,选择相应的菜单项,添加或取消菜单项前的“√”即可。

4.5.2 设置断点

当用户估计到程序某一处可能出错时,可在容易出错的语句的前一条语句处设置一个断点,待程序运行到此断点处,可进行逐语句运行程序,通过本地窗口和监视窗口查看变量中的值是否符合实际要求。在不需要断点时,可将断点从程序中清除。本节将介绍断点设置操作。在程序中添加断点需要按下述步骤操作。

(1)将光标定位于需要设置断点的程序行。

(2)选择“调试”命令后,弹出下拉菜单。

(3)在下拉菜单中选择其中的“切换断点”,光标所在行的代码颜色变成与断点相同的色彩,突出显示。

Tips

单击调试工具栏上的“中断”按钮或边界标识条上对应位置上也可设置断点。如果在一个包含用冒号分隔的多个语句上设置一个断点,则程序运行至程序行的第1个语句时,进入中断状态。

当程序调试通过或不再需要断点时,可清除断点,删除单个断点可按下述步骤操作。

(1)将光标定位于断点所在行。

(2)单击调试工具栏上的“中断”按钮。此时,光标所在代码行的断点消失,并且代码的字体颜色恢复正常。如果要删除程序中所有断点,则只需在“调试”菜单中选择“清除所有断点”命令即可完成删除断点。

Tips

程序在保存时,不会保存断点信息。

4.5.3 使用stop语句

stop语句用于暂停程序的执行,在程序语句中使用stop语句,会使程序由运行状态变为中断状态,其作用相当于在程序中设置断点。虽然stop语句会使程序暂停执行,但不会关闭任何文件或清除任何变量的值,除非stop是以编译后的可执行文件方式来执行。在程序中使用stop时,直接将stop写在一行程序代码上即可。

4.5.4 运行代码中的指定部分

运行代码中的指定部分是从程序代码中复制一部分程序代码,将其粘贴到立即窗口中,然后直接按下“Enter”键,在窗口中输入“? 变量名或表达式”,直接按下键盘上的“Enter”键,此时在立即窗口中可查看对应变量或表达式的值。

4.6 自定义Visual Basic编辑器开发环境

在了解了Visual Basic编辑器开发环境后,就可以根据自己的需要来设置Visual Basic编辑器开发环境,自定义开发环境时,可以设置编辑器格式、当前工程的编译方式、错误处理、可连接的窗口。本节将围绕上述主题来设置Visual Basic编辑器。

4.6.1 设置“编辑器”的基本功能

自定义Visual Basic编辑器的工作环境,需要按下述步骤进行。

(1)选择“工具”命令,弹出下拉菜单。

(2)选择“选项”命令,弹出如图4.38所示的对话框。其中的“编辑器”选项卡用于设置编辑器具备的基本功能,“编辑器”选项卡包括“代码设置”和“窗口设置”。

“代码设置”中,“自动语法检测”选项决定在代码窗口中输入一行代码,光标离开此行代码时,是否对当前行的代码做语法检查。由于在VBA中,允许所使用的变量在不经过声明的情况下使用,“要求变量声明”选项作用在于是否强制要求所使用的变量都必须先经过声明然后再使用。

在代码窗口中,如果输入的代码为与关键字、系统方法相关的字母,则在光标位置会智能地显示一个列表框,如图4.39所示,其中列出了与当前输入相关的方法或关键字,选取相应项后,按下空格键、“Tab”键或双击该方法,代码窗口中会录入此代码。“自动列出成员”选项将决定是否启用此项功能。

图4.38 “选项”对话框

图4.39 智能提示列表

在代码窗口输入MsgBox函数时,在当前行下面会给出相应的参数提示信息,如图4.40所示。“自动显示快速信息”选项决定是否启用此项功能。“自动显示数据提示”选项决定在中断模式下,是否显示指针所在位置的变量值。“自动缩进”选项决定当一行输入完毕后,按下“Enter”键后,下行代码是否从上一行代码的定位点开始。“Tab宽度”选项是设置定位点的宽度,默认设置是4 个空格,其范围是1~32个空格。

“窗口设置”中,“编辑时可拖放文本”用于设置选定的代码是否可以拖放到其他行或其他窗口中。“缺省为查看所有模块”用于设置在代码窗口中查看代码时,单一滚动列表或一次只看一个过程。“过程分隔符”能控制显示或隐藏过程代码结束时出现在过程尾部的分隔符条,分隔符如图4.41所示。

图4.40 自动显示快速信息

图4.41 过程分隔符

4.6.2 设置编辑器格式

图4.42 编辑器格式

设置编辑器格式是设置Visual Basic编辑器中代码显示的字体颜色、大小、字体等。单击图4.38中的“编辑器格式”选项卡,窗口中显示如图4.42所示的“编辑器格式”内容,其中包含了“代码颜色”、“字体”、“大小”、“前景色”等项目。其中“代码颜色”用于设置代码编辑区中的各种文本的前景色、背景色,“标识色”指页边距指示区的颜色。“边界标识条”选项用于设置其成可见或不可见。“示例”选项用于预览所设置的编辑器格式效果。

4.6.3 设置“通用”项

单击图4.42中“通用”选项卡,选项窗口中显示如图4.43所示的“通用”选项内容。其中包含了“窗体网格设置”、“编辑并继续”、“编译”等多项内容。其中“窗体网格设置”用于设置窗体设计时,窗体的外在表示形式。

“窗体网格设置”中的“显示网格”决定是否要在窗体设计的窗口上显示网格,“网格单位”用于决定一个网格的大小,“高度”、“宽度”分别用于决定网格的高度和宽度,其上下限为2~60点,“对齐控件到网格”项指自动将控件的边缘与网格对齐。“编辑并继续”中的“在丢失当前状态前通知”用于决定是否会收到消息,通知正在运行的工程,所要求的动作将引起所有模块级变量被重置。

图4.43 “通用”选项卡

“显示工具提示”用于设置当鼠标放于工具栏上的按钮上时,给出关于工具按钮的帮助提示。“项目折叠收起时隐藏窗口”指当折叠起工程时,与该工程相关的窗口将自动隐藏。“编译”项决定如何编译工程,“请求时编译”是决定工程在开始执行前是否需要全部编译或只编译所需要的代码,加快程序执行的速度。“后台编译”用于决定是否用系统空闲时间在后台完成工程的编译,后台编译可以改善运行时的执行速度。

Tips

只有在启用“请求时编译”时才可以启用“后台编译”。

“错误捕获”用于设置在Visual Basic编辑器中如何处理错误,此选项会影响所有处于活动状态的工程。“发生错误则中断”指不管程序中是否有活动的错误处理或代码在类模块中,只要发生错误都会使工程进入中断模式;“在类模块中中断”指捕获的错误位于类模块中时,将使程序进入中断模式;“遇到未处理的错误时中断”指当捕获错误后,如果有相应的错误处理,则不会使程序进入中断模式,否则会使程序进入中断模式。

4.6.4 设置“可连接的”选项

“可连接的”选项卡用于设置需要连接的窗口。单击图4.43中的“可连接的”选项卡,显示如图4.44所示的“可连接的”选项卡内容。其中包含了可连接的各种窗口,例如本地窗口、立即窗口、属性窗口、监视窗口、工程资源管理器等。将其设置为连接窗口后,当移动一个可连接的窗口时,该窗口快速地跟进到移动窗口的位置。可以将一个非可连接的窗口移动到屏幕上的任何地方,并将其留在拖动的位置。

图4.44 “可连接的”选项卡

4.7 习题

1. Visual Basic编辑器有什么特点?

2. Visual Basic编辑器中,代码窗口的主要作用是什么?

3. Visual Basic编辑器中,对象浏览器的主要作用是什么?

4. Visual Basic编辑器中,立即窗口的主要作用是什么?

5. 在VBA程序设计中,本地窗口的主要作用是什么?

6. 在Visual Basic编辑器中,监视窗口的主要作用是什么,它与本地窗口的区别是什么?