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

第3章 Excel 2007中的宏与VBA

在Excel 2007中可以实现自动化工作表,将一些常用的操作做成一个命令集合。当需要进行同样的操作时,可以直接使用制作的命令集合,在现有的电子表格上执行一次即可,而不需要再按步骤重复相同的操作,这就是Excel 2007中宏的功能。本章将学习的主要内容有:

❑ 掌握Excel 2007中宏的基本概念、基本操作。

❑ 掌握VBA的基本理论知识。

3.1 认识宏

在Excel 2007中,宏是一系列命令的有序集合,其中的命令是以Excel能直接识别的名字保存的。宏的使用可以减少复杂任务的步骤,使用宏命令可以显著地减少在创建、设置格式、修改和打印工作表上花费的时间。宏命令可以通过Excel 2007内置的录制工具来创建,也可以在代码编辑器里直接编写代码创建。

3.1.1 了解宏的安全性

宏的使用给操作工作带来了很大的方便,但宏是一系列命令的有序集合,宏的使用也给宏病毒提供了攻击Excel文档的机会。软件的安全性是软件应用的一个基本要求,在Excel 2007中宏的安全性控制是通过“信息中心”的宏设置选项完成的。

Tips

宏病毒是一种寄存在文档或模板的宏中的计算机病毒。当打开此种文档时,其中的宏就会被执行,此时宏病毒就会被激活,并转移到计算机上,驻留在Normal模板上。所有自动保存的文档都会 “感染”上此种宏病毒。如果用户在另一台机器上打开感染病毒的Excel文档,宏病毒又会转移到此计算机上。

1.通过信任中心设置宏的安全性

(1)选择“Office按钮”→“Excel选项”→“信任中心”命令,窗口右侧面板中将显示信任中心选项内容,如图3.1所示。

(2)选择面板中的“信任中心设置”→“宏设置”命令后,显示“信任中心”窗口,如图3.2所示,根据需要设置其安全级别。

2.通过“开发工具”选项卡设置宏的安全性

在Excel 2007工作主界面上选择“开发工具”→“代码”→“宏安全性”命令,弹出如图3.2所示宏设置对话框,根据需要设置其安全级别。

图3.1 信任中心内容

Tips

在默认的设置中,“开发工具”选项卡不会显示在功能区,此时就需要通过“Office按钮”来调整功能区的显示项。其操作方法是单击Office按钮,在弹出的菜单中选择“常用”命令,在右侧面板的“使用Excel时采用的首选项”栏目下,勾选“在功能区显示‘开发工具’选项卡”复选框后,单击“确定”按钮即可。操作界面如图3.3所示。

图3.2 “信任中心”窗口

图3.3 设置开发工具选项卡显示

3.1.2 理解宏的功能

宏最主要的功能就是自动化频繁使用的命令。在电子表格的处理工作中,遇到需要重复进行某同一操作时,或者Excel 2007没有提供一个内置工具完成此任务时,就可以创建一个宏,方便以后工作使用。宏命令能够将工作表的任何部分的工作实现自动化。例如自动化数据录入、检查选中的工作表区域里的重复值、通过宏命令快速地将格式应用到多个工作表,并且可以结合不同的格式,将图表创建和格式设置自动化。宏命令还可以设置页眉、页脚、页边距、打印区域及设置选择特殊的打印选项等。

3.2 在Excel 2007中宏的操作

在Excel 2007中,宏的操作更加方便快捷。若要使用宏则必须先制作宏,在制作宏的过程中所需进行的宏的操作主要包括录制宏、保存宏、执行宏、编辑宏、重命名宏、删除宏等。本节将介绍上述关于宏的基本操作。

3.2.1 录制宏

在录制宏的过程中,宏录制器会记录完成要录制的操作所需的一切步骤(有部分功能是无法完成录制的,例如,记录的步骤中不包括在功能区上导航的步骤)。因此在录制宏之前,要对所有需要录制的操作做一个详细的规划,同时要合理安排操作命令的顺序,否则录制的宏将包含大量的无关操作,最终影响宏的执行效率。

在开始录制宏之前有3项准备工作。

(1)确保功能区显示“开发工具”选项卡。

(2)将工作簿中宏的安全性级别设置为启用所有宏,其设置过程可参看“了解宏的安全性”。

(3)关闭所有包含宏或VBA代码的工作簿,以方便对录制宏的处理和定位。

准备工作完成后,下面来制作一个简单的宏,用于设置文字格式。

【例3-1】设置文字格式,其操作步骤如下所述。

(1)选择“开发工具”→“代码”→“录制宏” 命令,弹出“录制新宏”对话框,如图3.4所示。

(2)在录制新宏对话框中的“宏名”文本框中输入“设置文字格式”。

(3)单击“保存在”下拉列表框右边的下三角按钮,选择“当前工作簿”列表项。

(4)在“说明”下的空白编辑区输入“字体设置为楷体,字体颜色设置为红色,字体大小设置为18”,用于描述宏的功能,为以后使用宏提供一些说明性的信息。

(5)单击“确定”按钮,即开始录制宏。

Tips

宏名中不允许出现空格。通常用下画线代表空格。

(6)单击功能区“开始”→“字体”右下角的按钮,弹出设置单元格格式窗口。

(7)在窗口中的“字体”下拉列表框中用鼠标拖动垂直滚动条,找到“楷体_GB2312”列表项,选择此列表项。

(8)在“字号”下拉列表框中用鼠标拖动垂直滚动条,找到“18”列表项,选择此列表项。

(9)在“颜色”下拉列表框中选择红色。

(10)单击“确定”按钮,完成格式设置,如图3.5所示。

图3.4 “录制新宏”对话框

图3.5 设置字体格式结果

(11)所有的格式设置工作完成后,此时可单击“开发工具→代码→停止录制”按钮,结束录制。宏记录器就记录了设置文字格式过程中的所有操作。

Tips

停止录制按钮在正常的编辑状态是不可见的,只有在录制宏的过程中才可见。其位置与录制宏按钮的位置相同,即两个按钮是在同一位置交替出现的。位置示意如图3.6 和图3.7所示。

图3.6 “录制宏”按钮位置

图3.7 “停止录制”按钮位置

通过此例,可以看到录制宏的过程有以下4个步骤:

(1)做好关于启用宏、宏设置的准备工作。

(2)设置宏名、选择其保存位置。

(3)按照先前设计的操作命令,按顺序依次操作,直到所有的操作命令执行完毕。

(4)停止宏的录制,就完成了录制宏。

Tips

还有一种录制宏的快捷方法,就是单击状态栏右边如图3.8所示的录制宏按钮。

图3.8 “录制宏”按钮

3.2.2 保存宏

宏录制完成后,需要将宏保存起来,供重复使用。录制宏时,在弹出如图3.4所示的对话框中有“保存在”下拉列表框,此处只是将新录制的宏设置保存在工作簿中,若需要以后继续使用录制的宏,就需要保存该工作簿:单击快速访问工具栏上的“保存”按钮后,弹出“另存为”对话框,在“文件名”文本框中为文件命名,单击“保存”按钮即可。

Tips

对于含有宏的工作簿在保存时需要在“另存为”对话框中设置工作簿的“保存类型”,单击“保存类型”下拉列表框右边的下三角按钮,选择“Excel启用宏的工作簿”列表项,完成保存类型的设置,如图3.9所示。如果没有设定为此种类型,在单击“保存”按钮后,会弹出如图3.10所示对话框。

图3.9 设置保存类型

图3.10 未设置保存类型时的提示对话框

3.2.3 执行宏

录制宏是为了以后使用,使用宏就是要执行宏。Excel 2007中有多种运行宏的方法。此处介绍两种常用的方法。

(1)通过“开发工具”选项卡中的宏按钮来运行。

(2)通过键盘快捷键来运行宏。

此处以例3-1制作的宏为例介绍其运行方法。在Excel 2007编辑区的单元格中分别输入姓名、性别、年龄、家庭住址、工作单位,作为运行宏的测试数据。

1.通过宏按钮运行宏

(1)选择姓名、性别所在的两个单元格。

(2)单击“开发工具”选项卡,在功能区“代码”组中单击“宏”按钮或直接按下“Alt+F8”快捷键,如图3.11所示,弹出“宏”对话框,如图3.12所示。

图3.11 宏按钮

图3.12 “宏”对话框

(3)选择“宏名”列表框中相应的宏名。

(4)单击右侧“执行”按钮即可,宏运行效果如图3.13所示。

2.通过快捷键运行宏

要想通过快捷键运行宏就要在录制宏时为宏设置快捷键,如图3.4所示的对话框中有一项“快捷键”即为设置快捷键区。在例3-1中设置的键盘快捷键为“Ctrl+r”。其操作方法是首先选中年龄、住址、工作单位所在的单元格,然后在键盘上同时按下“Ctrl+r”组合键,宏运行效果如图3.14所示。

图3.13 通过宏按钮运行后的效果

图3.14 通过键盘快捷键运行宏的效果

Tips

设置的快捷键不要与Excel 2007中已有的快捷键重复,否则选择的宏不能正常执行。

3.2.4 编辑宏

宏记录器并不是万能的,是比较机械的,其记录的过程并不一定完全满足实际需求,此时就需要编辑已录制的宏。在Excel 2007中编辑宏,需要在Visual Basic编辑器中进行,其打开方法是在图3.12所示的对话框中单击“编辑”按钮后,弹出如图3.15所示的Visual Basic编辑器窗口,在Visual Basic编辑器窗口中可修改宏记录器记录的代码。关于宏代码的修改需要VBA编程的知识,在后续的章节中会详细介绍VBA程序设计的知识。

本节仅介绍一些关于宏编辑的简单操作。在打开的VBA编辑器中更改宏名比较简单,在代码窗口中直接删除第1行代码sub后的名字,重新输入新的宏名即可。当设置的快捷键与Excel 2007中已有的快捷键冲突时,可在如图3.12所示的对话框中单击“选项”按钮,弹出如图3.16所示的“宏选项”对话框,在“快捷键”下的文本框内输入字母即可。若需要为宏追加说明,可直接在其“说明”下的编辑区中输入要追加的内容,单击“确定”按钮即可。

图3.15 Visual Basic编辑器窗口

图3.16 “宏选项”对话框

3.2.5 删除宏

随着实践工作的加深,可能不再需要先前录制的宏,这时可以将其从工作簿中删除。根据实际需要可只将某个宏删除,也可以将包含该宏的模块删除。一个模块可以包含多个宏,当模块被删除时,包含在此模块中的所有宏都将会被删除。

1.通过宏列表删除

(1)在如图3.12所示的“宏选项”对话框中,用鼠标单击需要删除的宏。

(2)单击窗口右侧的“删除”按钮即可。

2.通过编辑器删除宏

在Visual Basic编辑器中进行操作,其操作步骤如下所述。选中需要删除的宏的所有代码,直接按键盘上的“Delete”键,然后关闭Visual Basic编辑器就可删除宏。删除模块时,首先打开Visual Basic编辑器,然后在其中进行操作,其操作步骤如下所述。

(1)在工程资源管理窗口中,单击相应模块。

(2)用鼠标右键单击该模块,弹出如图3.17所示的快捷菜单。

(3)选择“移出模块”命令,此时会弹出如图3.18所示的提示对话框,依据实际需要单击相应的按钮,如果单击“否”按钮则将模块完全删除。

图3.17 移除模块快捷菜单

图3.18 移除模块提示对话框

3.3 了解Excel VBA

了解Excel VBA就是要知道Excel VBA是什么,Excel VBA是做什么用的,Excel VBA的历史发展过程,Excel VBA有什么特点,以及与Excel VBA相关的Visual Basic和Excel 2007之间有什么关系。本节将围绕这一系列核心问题展开讨论,使读者在学习Excel VBA之前对其有一个轮廓性认识。

3.3.1 认识VBA

VBA是Visual Basic for Application的简写,是Microsoft公司为办公自动化处理文档开发的语言,主要应用领域集中于Microsoft Office办公软件,其中包括Word、Excel、PowerPoint等应用程序,在本书中将集中介绍VBA在Excel 2007中的应用。VBA能够很快发展在于其统用性,在VBA出现之前,Word、Excel、Access等都各自拥有自己的宏语言,程序之间无法互连。VBA产生后,多种应用程序共用一种宏语言,节省了程序人员的学习时间,提高了不同应用软件间的相互开发效率和调用能力。

在Excel 2007中,VBA的应用能使重复性的任务自动化;自定义Excel中工具栏、菜单和窗体的界面;简化模板的使用;为Excel环境添加额外的功能;创建报表;对数据执行复杂的操作和分析。上述列举的功能仅是单项功能,VBA在Excel 2007中功能之所以如此强大,其根本原因在于VBA非常灵活,可以将上述的各种功能有机地组合在一起。将复杂烦琐的日常工作自动化,使操作者从中摆脱出来。

3.3.2 了解VBA的特点

每一门计算机编程语言都有自己的特点。在Excel 2007中VBA作为一种自动化编程语言,其与自然语言十分相近,方便学习、容易掌握;以Excel 2007为工作平台,可以结合使用Excel 2007中已有的各种功能和丰富的数学函数,更好地体现Excel 2007能力;VBA语言可以根据实际需求对Excel 2007应用程序做无限的扩展。

3.3.3 理解VBA与VB的关系

VB是Visual Basic的简写,Visual Basic是由Basic发展而来的第4代语言。Visual Basic作为一套独立的Windows系统开发工具,可用于开发Windows环境下的各类应用程序,是一种可视化的、面向对象的、采用事件驱动方式的结构化高级程序设计语言。它具有高效率、简单易学及功能强大的特点。

从名称上来看VB与VBA就有着紧密的关系。两者既有相似的地方又有不同的地方。VBA是从VB发展而来的,其不但继承了VB的开发机制,而且VBA还具有与VB相似的语言结构,以及几乎完全相同的集成开发环境IDE(Intergrated Development Environment)。

VB与VBA的不同在于:开发的目的不同,VB是一门计算编程语言,用于制作标准的应用程序,而VBA仅是一门自动化语言,其目的在于将已有的应用程序自动化;编程环境不同,VB有独立的编程环境,例如Visual Basic 6.0就是其中最常用的一种,而VBA则需要在Excel 2007应用程序的基础上,才能编制程序做自动化处理;程序的执行方式不同,VB开发的应用程序,可在机器上直接运行,无须安装VB编程环境,而若要运行VBA程序则必须安装开发此程序的应用程序。

总之,VBA是一种继承了VB语言的自动化语言,掌握VB的读者,学习VBA将非常容易,反过来,掌握了VBA可以为学习VB奠定基础。

3.3.4 理解Excel 2007与VBA的关系

Excel 2007是VBA程序运行的基础,只有在Excel 2007的环境中Excel VBA程序才能正常运行,因此Excel 2007为Excel VBA提供了开发环境,同时也是Excel VBA运行的基础。反过来,VBA可扩展Excel 2007的功能,实现电子表格处理自动化。Excel 2007中的宏本质上就是Excel VBA程序,不同点在于:

(1)宏是通过宏录制器工作的,其程序是宏录制器自动书写的,而Excel VBA程序则需要在Excel 2007中的Visual Basic编辑器中书写。

(2)宏存在很多局限性,许多操作,宏录制器是无法记录的,例如当宏运行时,要根据单元格输入内容的不同做不同的计算,显示和使用用户自定义的窗体等。而VBA则比较灵活,可根据实际需要定制各种功能。

3.4 第1个Excel VBA程序

学习VBA最好的方法就是从一个简单的例子入手,本节将围绕一个简单的例子Hello Microsoft Excel 2007,分析程序结构,理解程序的执行过程,介绍运行程序的方法,对程序做一个简单的调试。使读者对Excel VBA应用程序从编制、运行到调试通过有一个轮廓性的认识。

【例3-2】 此程序功能是当运行此程序时,弹出一个对话框,其显示内容为“欢迎进入Excel 2007 VBA世界!”;单击“确定”按钮后,对话框消失。在程序中需要声明两个变量用于保存对话框的标题和对话框中将要显示的内容。

        01  Sub第1个VBA程序()
        02    Dim context As String      '声明了一个String类型变量context,用于保存对话框中将要显
    示的内容
        03    Dim title As String             '声明了一个String类型变量title,用于保存窗口的标题
        04    Rem将内容存入context变量
        05    context = "欢迎进入Excel 2007 VBA世界!"
        06    title = "Hello Excel 2007 VBA" '将标题存入title变量
        07    MsgBox context, vbOKOnly, title '显示对话框
        08  End Sub

【代码解析】 第2行~第3行用于声明变量,第4行用于注释,第5行至第6行用于为变量赋值,第7行用于显示窗口,输出程序运行结果。

3.4.1 理解程序结构

在例3-2中,总体上来看,所有的程序都包含在“Sub…End Sub”之间,其实以Sub开头的模块在VBA中是一个过程,“Sub”后的“第1个VBA程序”是过程名,用于标识一个过程,其作用同于日常生活中人的名字。

程序语句指位于“Sub…End Sub”中间的所有部分,其中“Dim”是声明变量的关键字,位于“Dim…As”之间的“context”和“title”变量名,“As”之后的“String”是变量的数据类型。“=”的作用是将右侧的值保存在左侧变量中。“MsgBox”是一个函数,用于构造对话框。每行结束时,都有以“’”开头的句子,此类语句是注释语句,程序中添加注释是为了方便理解程序。

Tips

在学习时,对于初接触程序的读者来说,可能会觉得有很多专业术语都不知为何意,此类问题不用担心,随着对VBA学习深度的增加,很多问题都会在后续的学习过程中慢慢明白。

3.4.2 理解程序执行过程

程序编写完毕后,下一步就是运行程序,程序的执行过程是按照从上到下的顺序执行的,执行时以语句为单位向下推进。由于VBA是高级语言,计算机不能直接执行用其书写的指令,需要先经过编译程序翻译成机器指令,计算机才能够直接执行。VBA的编译程序是属于解释型的,即边解释边执行。在例3-2中,程序从“Sub第1个VBA程序()”进入,然后分别声明context和title两个字符串类型的变量,接下来分别为两个变量赋值,最后输出欢迎窗口,程序执行完毕。

Tips

编译方法分为解释方式和编译方式。解释程序直接执行源程序或源程序的内部形式,一般是读一句源程序,翻译一句,执行一句,不产生目标代码。编译程序是将高级语言书写的源程序翻译成与之等价的低级语言的目标程序。编译程序与解释程序最大的区别之一在于前者生成目标代码,而后者不生成。此外,前者产生的目标代码的执行速度比解释程序的执行速度要快;后者人机交互好,适于初学者使用。

3.5 运行VBA程序

在理解了程序结构和程序执行过程后,就可以运行VBA程序了。安排本节内容的目的在于使读者学会简单地运行一个VBA程序。运行程序的操作步骤如下所述。

(1)选择“开发工具”→“代码”→“ Visual Basic”命令,弹出如图3.19所示的“Microsoft Visual Basic”窗口。

(2)在工程资源管理器窗口中任意位置单击鼠标右键,弹出如图3.20所示的快捷菜单。

图3.19 Microsoft Visual Basic窗口

图3.20 用鼠标右键单击工程资源管理器弹出快捷菜单

(3)选择快捷菜单中的“插入”→“模块”命令,在工程资源管理窗口中增加了“模块1”,如图3.21所示,同时弹出图3.22所示的代码窗口,在代码窗口中,录入例3-2中的程序代码,完成代码编辑。

图3.21 添加模块后的工程资源管理窗口

图3.22 代码编辑窗口

3.5.1 通过菜单运行程序

保证代码编辑准确后就可以运行程序了,在Visual Basic编辑器中运行程序有两种方法,本节将介绍通过菜单运行程序。其操作步骤如下所述。

选择Visual Basic窗口中的“运行”→“运行过程/用户窗体”命令,开始运行程序,如图3.23所示。

图3.23 “运行”菜单

3.5.2 通过工具栏运行程序

通过菜单运行程序是常规的运行程序的方法,在Visual Basic编辑器中,标准工具栏和调试工具栏都有“运行”按钮,分别如图3.24至图3.25所示。直接单击运行按钮也可运行程序。例3-2执行结果如图3.26所示。

图3.24 标准工具栏上“运行”按钮

图3.25 调试工具栏上“运行”按钮

图3.26 Hello Excel 2007 VBA窗口

3.6 调试VBA程序

初次编写的程序并不一定能保证运行成功,可能其中还存在着逻辑上或语法上的错误,此时就需要逐步调试,排查错误。一般情况下,编写程序的工作讲究的是三分编程,七分调试。调试在一个项目中占有很大的比重,调试成功也就说明程序在逻辑上和语法上已没有什么错误。此节仅介绍一些简单的调试程序的方法,在后续的章节中会有更详细的介绍。

3.6.1 查看程序结果

一个有价值的程序可以没有输入,但必须有输出,输出是为了告知用户计算机处理的结果。在VBA中,要查看程序的结果可以直接在程序中添加输出语句,生成提示对话框,给用户提示。例3-2 中就使用了此种方法,在程序中添加输出语句MsgBox,当程序执行结束时,弹出对话框。

3.6.2 查看变量值

调试程序有时需要逐语句执行程序,查看程序内部各个变量的变化情况。在Visual Basic编程环境中可以逐语句执行程序。在“本地窗口”中可查看本地变量的值,在“逐语句”执行程序之前,需要调出“本地窗口”,其操作步骤如下所述。

(1)选择“调试”→“逐语句”命令,程序进入逐语句执行状态。

(2)选择“视图”→“本地窗口”命令,弹出下拉菜单。

(3)例3-2逐语句执行至MsgBox语句时,本地窗口中各变量值如图3.27所示。

图3.27 本地窗口中查看变量

3.7 习题

1. 什么是宏?宏的主要作用是什么?

2. 如何录制宏?

3. 常用的运行宏的两种方法是什么?

4. VBA与VB的主要区别是什么?

5. 编写一个简单的程序,程序输出“北京欢迎你!”,窗口标题为“奥运2008”。