VBA中非常常用的条件判断语句,语法结构也很明了:
IF 条件 Then
语句
Else
语句
End IF
通常教材上都只写了这个语法结构。可是学习别人的代码时,发现有很多并不是按照这个语法来写的语句。如IF 条件 Then 语句;后面不写END IF结束语句。今天突发奇想写了个这样的:
If Rng.Value Like Format(Date, "m月d日 aaaa") Then Exit Sub
Else: Rng.Offset(1).Value = Format(Date, "m月d日 aaaa")
结果编译报错,后带上END IF编译还是报错。
无法,只得改语法格式:
If Rng.Value Like Format(Date, "m月d日 aaaa") Then
Exit Sub
Else
Rng.Offset(1).Value = Format(Date, "m月d日 aaaa")
End IF
编译通过了。那么什么情况下能省略END IF呢?还有我这么写的错误显然不在END IF,是错在哪了?
一番搜索,找到IF语法比较详尽的说明。IF语句有两种模式:
一、单行模式:If 条件 Then 语句 [Else 语句] (Else 可省略),就是在一行内写完(带冒号写成一行是不算的);这种写法Then、Else语句不可换行,语句结束不需要END IF,画蛇添足添上END IF会报错。这就是省略END IF的写法。
二、块模式:就是本文开头所列语法结构。
If 条件 Then
语句
[Elseif 条件 Then
语句] ‘中括号代表可省略项
[Else
语句]
End IF
我上述语句报错的原因由此明了:Then 后面检测到语句,判断为行模式,即这一IF语句已在此结束;再检测到Else 语句就认为没有IF了。就是说Else换行写,就是块模式,这种模式下 Then后面接的语句 必须写在下一行(THEN后用冒号带接语句也不行)。之后测试了Else 后的语句写成“Else:”语句行不行?测试通过,Else:是可以的。(ElseIF 不需要单独配对END IF。)