第1章 宏的应用初步
Excel VBA是一种简单易用的编程语言,能够快速开发基于Excel的应用程序。它本身不能独立运行,必须依附于Excel。对于Excel的编程代码既可以通过用户直接输入的方式来完成,也可以通过录制宏的方式来完成。本章介绍了宏的录制方法、运行方式、宏的保存位置以及对宏进行安全性设置。
1.1 宏的基本操作
在日常的工作中,经常会遇到这样的情况:同样一个任务需要重复操作若干次。如果没有宏,那么用户能够做的就是不断的重复这样的操作动作。但是如果用户将这些动作录制下来制作成宏,那么就可以通过运行宏来解决这样的问题。
1.1.1 Excel VBA简介
Excel VBA是什么?Excel VBA是一种特殊的编程语言,它不能独立存在,必须依附于Excel而不能脱离Excel起作用。它让开发者在熟悉的Excel中创建程序,缩短了学习的过程。由于Excel VBA依附于Excel而存在,因此利用VBA书写的代码不能独立运行,也不能打包成可执行文件。使用者需要安装了Excel才可以运行Excel VBA编写的程序。
正因为VBA的这个特性,使用者使用VBA的目的不是为了创建需要利用其他复杂编程语言才能完成的开发任务。虽然VBA大多数时候也能完成这些任务,但是这些已经不是VBA最擅长的工作。学习Excel VBA的目的应该是使得Excel发挥更大的作用。Excel VBA它面对的对象主角就是Excel。
Excel 2007在表格制作、数据处理、数据分析上具有很大的优势,Excel VBA能够使用代码来控制Excel 2007固有的功能,使得用户在处理数据的时候更加得心应手。很多时候用户的使用Excel VBA的过程实际上就是将执行的动作代码化的过程,通过代码的方式来操控对象,完成各项功能。
通常解决同样的一个问题,既可以使用代码的方式也可以执行选项卡上相关命令的方式。对于Excel的初级使用者来说,很显然执行命令方式完成任务更加简单。但是这也带来了一定的局限性,例如用户无法执行循环操作,对于很多重复的过程要一次次地重复运行,自动化程度不高。而使用代码的方式就要灵活得多,不仅仅可以循环地执行某些操作,还可以针对操作的步骤进行判断。使用代码方式还可以解决某些使用界面操作方式无法解决的问题。
用户学习Excel VBA大多数的时候其目的都在于数据处理和分析,虽然工作表的外观上看上去和数据库中的表类似,但从本质上来说,Excel工作表设计的目的并不是为了将工作表当作数据库使用。而且当数据量较大时,Excel单纯作为数据库来保存数据安全性不高,而且对数据的查询分析也远不如真正的数据库方便高效。为此通常将Excel 2007作为开发的前台,而将相关的数据保存到Access或者SQL Server等数据库中,这样既可以利用Excel 2007的数据分析处理优势,也可以保证数据的安全。
学会在Excel中用VBA创建解决方案后,这些知识也可以用于Word、Access、OUTLOOK等Office应用程序中。学习VBA最大的难点在于了解每种应用软件的对象模型,Excel有自己独特的对象模型,其他的Office软件也有自身独特的模型。只有对这些模型的用法有详细的了解,才能使得自己的VBA能力得到提高。
1.1.2 显示开发选项卡
要学习使用Excel VBA就必须用到“开发工具”选项卡,用户安装了Excel 2007后,在默认情况下Excel 2007功能区中是不显示“开发工具”选项卡,其界面如图1-1所示。
图1-1 界面
要将“开发工具”选项卡显示出来,其操作步骤如下。
(1)单击Excel 2007左上角的Office按钮,单击“Excel选项”按钮,打开“Excel选项”对话框。
说明
也可以单击快捷工具栏右侧的下三角按钮,在打开的“自定义快速访问工具栏”下拉列表中单击“其他命令”按钮,也可以打开“Excel选项”对话框。
(2)在左侧选择“常用”,在右侧选择“在功能区显示‘开发工具’选项卡”复选框,如图1-2所示。单击“确定”按钮,完成“开发工具”的选择。
图1-2 “Excel选项”对话框
通过上述操作,就能在功能区上显示如图1-3所示“开发工具”选项卡。
图1-3 “开发工具”选项卡
1.1.3 录制宏
在介绍Excel VBA之前不能不说到宏。宏对于很多用户来说是一个让人糊涂的概念。其实宏是Macro的简单音译,从汉字本身并不能了解其内涵。宏是能够自动完成某项工作的一系列指令的集合。宏的形成方式有两种,一种方式是自动记录用户的操作形成宏,这个过程就是宏的录制过程;另外一种方式就是用户使用VBA直接编写宏。
Excel就具有这样的功能,它能够将用户在Excel中的操作过程记录下来,并自动形成代码。这个过程就是录制宏的过程。录制宏使用到了Excel 2007中的宏录制器,而记录用户动作所使用的语言正是VBA。
录制宏的过程好比用户使用了一台动作录像机,它能够真实的录制用户在Excel 2007中的每个操作步骤,并将这些操作步骤用代码记录下来。
例1-01:假设有关销售记录的工作簿内,在工作表的A1到A4单元格内显示的内容总是北京、上海、天津和重庆四个城市的名称。录制一个宏,使得不论用户现在选中的单元格在什么位置,只要运行该宏,就能够在A1到A4单元格内显示指定的内容。
解决问题的方法就是录制一个宏,录制宏的具体方法如下。
(1)打开“开发工具”选项卡,执行“代码”组内的“录制宏”命令,打开“录制新宏”对话框。
说明
还可以单击Excel 2007左下角的录制宏按钮,如图1-4所示,打开“录制新宏”对话框。
图1-4 录制新宏
(2)将宏的名称更改为“输入城市名称”,快捷键设置为“Ctrl+b”,保存位置设置为“当前工作簿”,单击“确定”按钮,如图1-5所示,开始录制宏。
图1-5 “录制新宏”对话框
说明
宏名是对宏所具有功能的简要描述,表示的是这个宏录制完成后将可以完成什么任务。宏名完全是用户自定义的的描述性语言。
快捷键是利用组合键的方式来快速启动宏。上图中设置快捷键为b,表示用户在今后只需要同时按Ctrl+b键,即可启用该宏。如果用户设置快捷键为一个大写字母B,那么表示今后需要同时按Ctrl+Shift+b组合键来启动该宏。如果用户设定的快捷键和Excel 2007已经存在的快捷键相同,那么优先执行宏所设定的快捷键。例如组合键Ctrl+s本来是表示保存文件,但是如果它被设定为某个宏的快捷键,那么用户按下组合键Ctrl+s的时候执行的是宏的内容,而不是保存文档。
宏录制完成后常保存于当前工作簿或个人宏工作簿中。保存于当前工作簿表示只有启动当前的工作簿才能使用该宏。而如果保存的位置在个人宏工作簿,那么只要启动Excel 2007,就能够执行该宏,而不一定打开该工作簿。个人宏工作簿是一个隐藏的工作簿,该工作簿在没有录制宏以前不存在,录制宏以后才会存在。
(3)选中A1,在A1单元格到A4单元格内输入城市名称北京、上海、天津和重庆。
说明
不论A1单元格当前是否处于被选中状态,都必须执行一次选中A1单元格的操作。
(4)在“开发工具”选项卡上执行“代码”组内的“停止录制”命令,完成宏的录制。宏录制完成后,Excel 2007就将上述的操作过程转化为代码,用户可以查看用VBA自动生成的代码。查看代码的方法是打开“开发工具”选项卡,执行“代码”组内的“Visual Basic”命令,即可打开代码窗口,其代码如下所示。
Sub输入城市名称() ' ' 输入城市名称Macro ' ' 快捷键: Ctrl+b ' Range("A1").Select ActiveCell.FormulaR1C1 = "北京" Range("A2").Select ActiveCell.FormulaR1C1 = "上海" Range("A3").Select ActiveCell.FormulaR1C1 = "天津" Range("A4").Select ActiveCell.FormulaR1C1 = "重庆" Range("A5").Select End Sub
这些代码的含义初学者并不需要多加了解,在学习完后续章节后,将会很快了解这些代码所代表的含义。
录制宏虽然很方便,但是它本身也有一定的局限性。录制宏只是记录了用户的操作过程,它并不能进行循环和判断,不具备人机交互能力。虽然如此,录制宏还是很有意义的,它可以为用户解决某些问题提供思路,也可以学习某些不熟悉对象的使用方法。
1.1.4 管理宏
宏录制完成后,表示用户对工作簿的操作动作被完全记录下来了。如果用户录制了很多宏,那么对宏的管理就显得非常重要。宏的管理包括了宏的执行、编辑和删除。
1. 运行宏
运行宏就是程序执行自动生成的代码或者手工输入代码的过程。用户可以在宏对话框中运行已经录制的宏。
例1-02:以上节所录制的名为“输入城市名称”的宏为例,要运行该宏,可以用如下的方法来进行。
(1)将Sheet1工作表中的A1到A4单元格内容清除。
(2)打开“开发工具”选项卡,执行“代码”组内的“宏”命令,从打开的宏命令窗口中选择录制的宏“输入城市名称”,如图1-6所示。单击“执行”按钮,完成操作。
图1-6 执行指定的宏
说明
用户同时按键盘上的Ctrl+b组合键键,也可以执行“输入城市名称”这个宏,在指定的位置填充上内容。
除了上述方法运行宏外,还可以为“自定义快速访问工具栏”添加一个“查看宏”的按钮,通过该按钮即可打开“宏”对话框,具体操作步骤如下。
(1)单击Excel 2007左上角的Office按钮,单击“Excel选项”按钮,打开“Excel选项”对话框。
(2)在“Excel选项”对话框中,左侧窗格内选择“自定义”命令,在右侧窗格中“从下列位置选择命令”下拉列表中选择“常用命令”,并在显示的常用命令列表框中选中“查看宏”,单击“添加”按钮,完成为“自定义快速访问工具栏”添加一个查看宏的命令按钮,如图1-7所示。
图1-7 “查看宏”命令
单击“自定义快速访问工具栏”中的查看宏命令按钮,也可打开如图1-6所示的“宏”对话框。
2. 编辑宏
编辑宏实际上是对代码的编辑,用户在上述“宏”对话框中,单击编辑宏,会打开代码窗口,在代码窗口中显示的内容正是上节所述代码。对于宏的编辑,将在以后各个章节叙述。
3. 删除宏
如果已经存在的宏不再需要,那么可以删除指定的宏。仍旧以“输入城市名称”宏为例,删除该宏的方法是:打开“开发工具”选项卡,执行“代码”组内的“宏”命令,从打开的宏命令窗口中选择要删除的宏“输入城市名称”,单击“删除”按钮,完成操作。
宏删除后,打开“开发工具”选项卡,执行“代码”组内的“Visual Basic”命令,打开代码窗口,此时可以发现上述的那段代码已经不复存在。
1.1.5 使用相对模式录制
当用户选择工作表的任意一个单元格,执行“输入城市名称”宏时,执行的效果总是在A1到A4单元格填充城市名称。现在要更进一步,假设用户选中工作表中任意一个单元格,执行该宏,能让它从当前选中的单元格开始向下排列自动输入四个城市的名称。
解决这个问题的方法就是在录制宏的时候使用相对模式。在默认情况下,宏的录制采用的是绝对模式。
例1-03:录制一个名为“相对模式下输入城市名称”的宏,使得该宏总能从当前选中开始选中的单元格向下排列自动输入北京、上海、天津和重庆。
用户要达到这个目的需要采用相对模式进行录制,具体操作步骤如下所示:
(1)选中A1单元格,选择“开发工具”选项卡,执行“代码”组内的“使用相对引用”命令,完成对录制模式的设置。
(2)打开“开发工具”选项卡,执行“代码”组内的“录制宏”命令,打开“录制新宏”对话框,在对话框中,宏名称更改为“相对模式下输入城市名称”,单击“确定”按钮,开始录制宏。
(3)在A1单元格到A4单元格内输入城市名称北京、上海、天津和重庆。
(4)选择“开发工具”选项卡,执行“代码”组内的“停止录制”命令,完成宏的录制。
此时用户可以选择B2单元格,选择“开发工具”选项卡,执行“代码”组内的“宏”命令,从打开的宏命令窗口中选择录制的宏“相对模式下输入城市名称”,可以发现从B2到B5单元格区域内也填充了四个城市的名称。
用选择“开发工具”选项卡,执行“代码”组内的“Visual Basic”命令,即可打开代码窗口,其代码如下。
Sub相对模式下输入城市名称() ' ' 相对模式下输入城市名称Macro ' ' 快捷键: Ctrl+b ' ActiveCell.FormulaR1C1 = "北京" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "上海" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "天津" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "重庆" ActiveCell.Offset(1, 0).Range("A1").Select End Sub
比较这段代码和“录制宏”一节中的代码,可以发现在前一节中类似于“Range("A1").Select”这样的代码不见了,取而代之的是“Offset(1, 0)”这样的代码。这就是使用相对模式的结果。