在前面讨论赋值语句并重点强调数据类型转换的基础上,今天我们来讨论条件语句。所谓条件语句(conditional statement),是指根据条件做出选择的语句。VBA 支持两种条件语句:If … End If,以及 Select Case … End Select。If … End If 语句我们先来看一个例子:
Dim n As Integer' ...If n Mod 2 = 0 Then Debug.Print "n is Even"Else Debug.Print "n is Odd"End If
在上面的代码片段中,Mod 是一个模运算符(很多语言中都用 % 表示),n Mod 2 表示求 n 除以 2 的余数。如果 n 除以 2 的余数等于 0,那也就是说,n 能被 2 整除,则表示 n 是偶数,否则 n 是奇数。n Mod 2 = 0 这个表达式是一个条件表达式,条件表达式的求值结果是一个 Boolean 类型的值。Boolean 类型只有两个值:True 和 False。如果 n 是偶数,譬如 n 的值为 10,则 n Mod 2 的结果为 0,整个条件表达式就变成了 0 = 0,这个表达式的结果就是 True。在表达式 n Mod 2 = 0 中,Mod 是模运算符,= 是 比较运算符,模运算符的优先级高于比较运算符,所以 n Mod 2 = 0 等价于 (n Mod 2) = 0。也就是说,在求取表达式 n Mod 2 = 0 的值时,先求子表达式 n Mod 2 的值,然后再用求得的值与 0 进行比较,如果相等,结果就是 True,如果不相等,结果就是 False。在上面的例子中,如果 n Mod 2 = 0 的值为 True,就执行 If 和 Else 之间的语句,即 Debug.Print “n is Even”;如果为 False,就执行 Else 和 End If 之间的语句,即 Debug.Print “n is Odd”。这就是根据条件(n Mod 2 = 0)做出选择(是执行 Debug.Print “n is Even” 还是 Debug.Print “n is Odd”)的意思。If … End If 语句有几种形式:
单语句形式:If … Then …
If … Then … End If 形式
If … Then … Else … End If 形式
嵌套形式
If … Then …如果是判断某条件成立的话,则执行一条语句,对于这样非常简单的判断,只需要使用最简 If 语句。在这种语句中,条件和要执行的语句都写在同一行上。如下面的例子:
Dim n As Integer' ...If n < 0 Then n = -n' ...
在上面的例子中,n 是 Integer 类型的变量,n 的值既可能是负数,也可能是正数(准确地说是非负数)。下面的代码要保证 n 是非负数,则需要这样一条 If 语句,来判断 n 当前的值是否为负,如果是,则利用“负负得正”的数学原理,取其 -n 的值(这里的负号 – 是一元运算符,其作用是将其操作数反号)。If … Then … End If如果条件为真时需要执行多条语句,则需要用 End If 作为 If 语句的结束符,以告之 VBA 此 If 条件句包含了多条要执行的语句。如下面的例子:
If Sheet1.Range("A1") Mod 2 = 0 ThenSheet1.Range("A1").Interior.Pattern = xlSolidSheet1.Range("A1").Interior.PatternColorIndex = xlAutomaticSheet1.Range("A1").Interior.Color = RGB(255, 0, 0)End If
这段代码就是一个复杂的 If 语句的例子,条件是判断 A1 单元格的值是否能被 2 整除,如果是,则将背景颜色设置为红色。将单元格背景颜色设置为红色是需要多条语句才能完成的一系列操作。因此,这个 If 语句需要用 End If 作为结束符,将三条赋值语句扩在其中。If … Then … Else … End If这种 If 语句形式我们在开头就已经见到了。现在我们把上面的例子扩充一下,如果 A1 单元格的值不能被 2 整除,则将单元格的背景颜色设置为绿色。如下所示:
Sheet1.Range("A1").Interior.Pattern = xlSolidSheet1.Range("A1").Interior.PatternColorIndex = xlAUtomaticIf Sheet1.Range("A1") Mod 2 = 0 ThenSheet1.Range("A1").Interior.Color = RGB(255, 0, 0)ElseSheet1.Range("A1").Interior.Color = RGB(0, 255, 0)End If
在这个例子中,为了避免啰嗦,我们把设置单元格背景填充模式的语句移到了 If 语句前面,这样,If 语句就只有两条语句了:根据单元格内容是否能被 2 整数而分别设置为红色还是绿色。RGB 是 VBA 的一个函数,其语法格式是: