学会VBA,菜鸟也高飞!
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 Excel的身体结构

我们每天都在操作Excel,比如对Excel执行排序、筛选等操作,制作数据图表等,只是这些操作大多是在Excel界面上“手动”操作完成的。通过本书的学习,我们就可以用VBA“自动地”操作Excel,让Excel按照我们的意愿“自动地”为我们工作。

俗话说:人有人言,兽有兽语。计算机也有它自己能够理解的语言,对于Excel来说,它能理解的语言就是VBA。从这个角度来讲,我们可以把Excel比做一个小怪兽,而我们则像一个魔法师,阅读本书,就像正在学习一种能够操控Excel这个小怪兽的魔法语言,这种魔法语言就是VBA!

其实,Excel这个小怪兽并不“怪”,只是有一些“超能力”而已,比如,我们可以让它“三头六臂”——我们可以在一个Excel应用程序里建立三个工作簿文件(好比“三头”),每个工作簿文件里各建立两个工作表(每个工作表相当于一个手臂,三个工作簿文件一共六个“手臂”)。如果学会了VBA这种“兽语”,我们就可以脱离Excel界面实现前面的任务,只需用VBA语言告诉Excel完成这些动作就行了。

要想用VBA指挥Excel,我们必须先要了解Excel的“身体结构”,这对于我们并不困难,因为我们天天和Excel打交道,对Excel的“身体组成”再熟悉不过了。不过,为了学习VBA,还是非常有必要系统地介绍一下Excel各部分的名称,重点是了解Excel各部分组成的英文叫法。

当打开Excel应用程序(Application)后,我们可以通过“文件”→“新建”菜单建立一个或几个Excel工作簿文件,这些工作簿文件统称为Workbooks(英语单词Workbook的复数形式),如图1-1所示。

图1-1 同一个Excel程序中建立了多个工作簿文件

下面我们分别介绍各部分在VBA语言中的表达方法。

1.Workbook(工作簿)

一个工作簿就是一个Excel文件。我们知道,在一个Excel应用程序中可以打开多个工作簿文件,图1-1中在一个Excel应用程序中打开了三个Excel工作簿文件。Excel VBA中,在一个Excel应用程序中打开的所有工作簿文件统称为Workbooks(英语单词Workbook的复数形式,标准中文名称为“工作簿集合”)。在图1-1中,Excel窗口中最左面的“工作簿1.xlsx”,用VBA语言表示就是:

        Workbooks("工作簿1.xlsx")

翻译成人类的自然语言就是:许多工作簿(即“工作簿集合”)里面的某个具体的工作簿(“工作簿1.xlsx”)。

同理,图1-1中“工作簿2.xlsx”用VBA语言表示就是:

        Workbooks("工作簿2.xlsx")

2.Worksheet(工作表)

每个工作簿可以包含一个或多个工作表。同一个Workbook中的所有Worksheet统称为Worksheets(英语单词Worksheet的复数形式,标准中文名称为“工作表集合”)。在图1-1中,工作簿文件“工作簿1.xlsx”中名称为“Sheet1”的工作表,用VBA表示就是:

        Workbooks("工作簿1.xlsx").Worksheets("Sheet1")

上面这句VBA语句翻译成人类的自然语言就是:在许多工作簿中名称为“工作簿1.xlsx”的工作簿中的许多工作表中名称为“Sheet1”的工作表。

类似地,名称为“工作簿2.xlsx”的工作簿中的名称为“Sheet1”的工作表,用VBA可以表示为:

        Workbooks("工作簿2.xlsx").Worksheets("Sheet1")

3.Cells(单元格集合)

Cells表示Worksheet上的所有单元格。当我们用VBA表示某个特定的单元格时,比如位于第1行第2列的单元格可以表示为Cells(1,2)。在图1-1中,“工作簿1.xlsx”中名称为“Sheet1”工作表中左上角的(A1)单元格用VBA表示为:

        Workbooks("工作簿1.xlsx").Worksheets("Sheet1").Cells(1,1)

上面这句VBA语句翻译成人类的自然语言就是:在许多工作簿中名称为“工作簿1.xlsx”的工作簿中的许多工作表中名称为“Sheet1”的工作表的许多单元格中的第1行第1列单元格。

更正式一点的翻译是:在工作簿集合中名称为“工作簿1.xlsx”的工作簿中的工作表集合中名称为“Sheet1”的工作表的单元格集合中的第1行第1列单元格。翻译成自然语言很绕口,显然,还是用VBA表达更加清晰明确。

4.Range(单元格区域)

Range是指Worksheet上的一个或多个单元格构成的单元格区域。在图1-1中,“工作簿1.xlsx”中的名称为“Sheet1”工作表中左上角的(A1)单元格用VBA可以表示为:

        Workbooks("工作簿1.xlsx").Worksheets("Sheet1").Range("A1")

上面这句VBA语句翻译成人类的自然语言就是:在许多工作簿中名称为“工作簿1.xlsx”的工作簿中的许多工作表中名称为“Sheet1”的工作表中单元格区域“A1”。

类似地,该工作表中的A1:D100单元格区域,用VBA可以表示为:

        Workbooks("工作簿1.xlsx").Worksheets("Sheet1").Range("A1:D100")

5.ThisWorkbook(当前工作簿)

每个工作簿文件里都可以包含VBA代码。在Excel VBA中,单词ThisWorkbook表示当前VBA代码所在的工作簿。对于代码:

        Workbooks("工作簿1.xlsx").Worksheets("Sheet1").Range("A1:D100")

如果该VBA代码恰巧写在了工作簿文件“工作簿1.xlsx”中,那么就不用那么嗦了,此代码可以改写为:

        ThisWorkbook.Worksheets("Sheet1").Range("A1:D100")

到现在为止,我们已经了解了Excel“身体结构”最基本部分的VBA表达方式,下面的章节将继续介绍如何用VBA操纵Excel“身体结构”的各个部分,像“耍皮影戏中的影人”一样,用VBA指挥Excel为我们服务。

曾经有个著名的问题,叫做“幸福是什么?”关于这个问题,有一个有趣的答案:幸福就是“猫吃鱼,狗吃肉,奥特曼专打小怪兽”。如果把Excel比做小怪兽,那么,我们天天在和Excel小怪兽打交道,其实天天都在“幸福着”。也许你不愿意把自己比做奥特曼,但是,作为一个经常和数据打交道的办公室工作人员,如果你再不了解一点儿VBA,那么也许你真的会OUT了。

好了,让我们继续学习。