购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.2 见微知著
——从一个简单例子观察VBA程序的结构

如前所述,标准程序是最常用到的VBA程序类型,所以就以它为例,了解一下VBA程序代码的基本结构。

首先,在VBE的“工程”窗口中插入一个模块,然后双击该模块,便可以在“代码”窗口中编写标准程序。下面就是我们的第一个 VBA 小程序,大家只要一字不差地输入代码,并单击工具栏上的“运行”按钮 ,就可以看到这段程序的运行结果——让当前工作表C2单元格中的内容变成5、C3单元格中的内容变成6,如图1.9所示。

图1.9 编写并运行第一个VBA程序的步骤

1.2.1 Sub /End Sub
——程序的起始与结束

观察图1.9中的代码可以看到,这个VBA程序是以“Sub”开始、以“End Sub”结束的若干行字符。而Sub后面的文字“Demo”就是我们为这个VBA程序指定的名称(读者可以根据自己的喜好把它改为其他字母或汉字)。当用户要求运行某个程序时,计算机就先找到含有该程序名称的Sub语句,然后开始运行它下面的每一行代码,直到遇见“End Sub”为止。

我们可以把“Sub”和“End Sub”理解为一个VBA程序的“国境线”:凡是写在一对“Sub”和“End Sub”之间的代码,都属于这个VBA程序。这样,当一个模块中存放了多个程序时,每个程序的“势力范围”都可以划分清楚且互不干扰(为了让程序之间的分界看起来更加清楚,VBE的代码窗口还会自动在每个VBA程序之间添加一条直线),如图1.10所示。

此外需要注意的是,在程序名Demo的后面必须加一个圆括号(如果忘记书写,VBE会自动将其添加到代码中)。Sub语句中的圆括号用于过程间的参数传递,对此本书后面会有专门章节进行介绍。

图1.10 VBA程序的基本结构与边界

1.2.2 词汇与语句
——程序语言的基本要素

我们日常使用的语言是以“语句”为基本单位的,下面这段话就包括三个语句,分别用句号和问号隔开。

“我明天去上海。上海的天气怎么样?是否需要带一把雨伞?”

我们在理解上面这段话时,会先把它分解成三个语句,然后分析每个语句的含义。而对于其中的每一个语句,比如“我明天去上海”,还要进一步将它分解为“我”“明天”“去”和“上海”四个词汇,再对应到大脑中已有的概念和印象,才能得出这句话的正确含义。

同样的,VBA等程序语言也需要按照“语句”和“词汇”的模式进行表达,即一个程序由一条或多条语句构成,每条语句由一个或多个词汇构成。

1.VBA语句及其分隔符

与人类语言不同的是,VBA程序中的语句不是通过句号、问号等标点符号隔开的,而是通过“换行”来分隔的。也就是说,“代码”窗口中的每行代码代表一条语句,即每条程序语句必须写在同一行中

所以在图1.9所示的VBA程序示例中,“代码”窗口内一共有四条语句(四行代码)。第一条语句“Sub Demo()”和最后一条语句“End Sub”标识了程序的开始位置和结束位置,其内部的第二条和第三条语句则用来实现该程序的主要功能。

不过有的时候需要书写很长的语句,如果强行把它写在一行代码中,会严重影响美观和阅读效率。在这种情况下,我们可以使用空格与下画线将一条语句进行拆分,如图1.11所示。

图1.11 使用空格和下画线将代码拆写成两行

同时,VBA 也允许我们使用冒号“:”将多个短语句合并到一行代码中,从而节省空间,增强代码的可读性。具体用法如图1.12所示。

图1.12 使用冒号将多行代码合并

初学者需要特别注意的是:这里提到的所有符号,包括空格、冒号、下画线、圆括号等,必须使用英文半角格式,不能使用全角格式。虽然它们的外观十分相似,但完全是不一样的字符,不能混淆使用!这一点对于后面的章节同样适用,请格外注意。

2.VBA词汇及其分隔符

每一条VBA语句都是由一个或多个词汇构成的。比如Demo程序内部的第一条语句“Cells(2,3)=5”,可以初步分解为“Cells(2,3)”“=”“5”三个词汇 。在这三个词汇中,“=”也起到了分隔符的作用,使VBA能够正确地分隔辨识出每个词汇。

较常见的词汇分隔符是空格。比如在第一条语句的“Sub”和“Demo”之间及最后一条语句的“End”和“Sub”之间,都有一个空格作为分隔符。这种使用空格来区分不同单词的习惯,来自英语等表音文字。

如果在代码中不小心忘记了书写空格,最后一行语句就会变成“EndSub”。在这种情况下,计算机认为该语句只包含一个叫作“EndSub”的单词,而不会把它解读为“End”和“Sub”两个单词,因而无法将这一语句理解为“程序结束标志”,导致程序运行出错。 cnauRopz+69+h02/KAIkW+JPyYfjlrKbmLPz6JMi/17jCRVcz9fl4P0M4M5o3Kjl

点击中间区域
呼出菜单
上一章
目录
下一章
×