从本篇开始,我们进入 VBA 语法的另外一个重要概念,程序结构。
上一章学习的变量、数据类型、运算符等概念,是 VBA 中"静态"
的部分。相对的,程序结构是 VBA 中 "动态"
的部分。学习完程序结构,才能真正写出可以运行的 VBA 程序。
本篇我们先介绍程序结构最常用的部分,深入学习前有一个基本概念。本章余下的教程中,将详细介绍每一个程序结构。
戳我学习>>知识兔精品课《Office2019零基础入门精通全套大师级课程》
程序结构示例
首先,本篇将使用以下代码,介绍各种程序结构,大家可以先看一下。
Sub MyCode() '声明循环变量和是否为空变量 Dim i As Integer Dim isBlank As Boolean '循环 A2-A10 单元格 For i = 2 To 10 '存储单元格是否为空的结果 isBlank = Cells(i, 1).Value = "" '如果为空,则用上方的单元格的值填充当前单元格 If isBlank Then Cells(i, 1) = Cells(i - 1, 1) End If Next iEnd Sub
以上代码运行后,在 A2:A10 单元格区域,依次判断每一个单元格是否为空,如果是空,则用上一个单元格的值填充。
过程
过程是 VBA 中,程序实际运行的最小结构。单独的一行或多行代码无法运行,必须把它们放置在一个过程里,才能运行。
在示例中,Sub 过程名()
开头,End Sub
为结尾部分是一个过程的主题,其余代码需要放置在两者之间。
Sub MyCode()End Sub
程序语句
语句,是表示一个完整意思的一行代码。
例如,示例中第一行,声明变量就是一条语句。它表示,声明一个整型变量。同理,第二行、第三行和其余的每一行都是语句。VBA 中的过程,就是由这样一条条语句构成的。
Dim i As IntegerDim isBlank As Boolean
通常,一行就是一个语句,除非它用换行符或合并符号,具体可以阅读「VBA 运算符入门」。
Excel VBA 对象
我们学习 VBA 的最终目的是操纵 Excel,完成一些特定的目标。其中,操纵 Excel 就是通过 Excel VBA 对象完成的。
在示例中,Cells()
就是一个 Excel VBA 对象,表示一个单元格,提供行号和列号指定单元格。
程序运行结构
接下来是程序结构中最核心的部分,也是最有意思的部分,程序运行结构。大部分编程语言都具备基本的三种程序运行结构,分别是顺序结构、循环结构、判断结构。各种简单到复杂的算法,都是由这三种基本的结构,相互组合而完成。
1.顺序结构
首先是基本的顺序结构。顺序结构,顾名思义就是按照顺序依次执行。VBA 中的顺序就是从上到下、从左到右的顺序。
在示例中,首先运行两个声明语句,然后运行循环结构,以此类推。值得注意的事,当程序有嵌套时,嵌套的部分也是按照顺序指定的。
2.循环结构
第二个基本结构是循环结构。当使用循环结构时,循环部分代码,按照指定的循环次数,循环重复执行。
在我们的示例中,For 至 Next i 之间的代码就是一个循环代码。
VBA 中,有多种循环结构,本例中是 For 循环结构。For 循环结构中,第一行指定循环次数,最后一行表示开始下一个循环。
'循环开始For i = 2 To 10'这里是循环的代码Next i
3.判断结构
最后一种基本结构是,判断结构。简单来说,该结构中,当提供的表达式为真(True)时,判断结构的主体部分才会被执行,否则跳过。
在示例代码中,If 开头和 End If 结尾处是典型的判断结构。第一行,判断 isBlank 变量是否为真,如果是,则执行判断结构主体部分,否则跳过。
'如果为空,则用上方的单元格的值填充当前单元格If isBlank Then Cells(i, 1) = Cells(i - 1, 1)End If
注释
通常,一段代码写完后,不会完全没问题。在实际使用过程中可能需要修改,符合最新的需求。过一段时间再打开查看时,可能已经忘记了当时的思路,不能很快想起来有些代码实际的用途,更不用说让别人查看了。这时,就需要注释出场了。
注释是对代码的一种解释,不影响代码的运行。VBA 中的注释语句是,以英文单引号 (')
开头,后接需要解释说明的内容。
注释可以让代码更容易理解,建议从一开始就养成写注释的习惯。
运行
下面,我们实际运行我们的示例代码,看一看它具体的效果。
总结
现在你学会了基本的 VBA 程序结构。可以运行的最小单位是 VBA 过程,一个 VBA 过程由一个或多个语句组成,每一个语句表示一个完整的含义。VBA 是按顺序结构执行,遇到循环结构和判断结构时,根据提供的参数循环重复执行,或跳过某一段代码。
本章余下教程,将详细介绍以上每一部分。学完本章后,你就可以写出一个完整可运行的 VBA 程序了。