在VBA中冒号“:”(语句定界符)到底是做什么的?
“:”作为“换行符”无法解释此行为:
此三行代码成功编译:
If 1 = 2 Then
MsgBox "impossible"
Else: MsgBox "OK": End If
此两行版本失败,并显示“编译错误:否则为If”:
If 1 = 2 Then: MsgBox "impossible"
Else: MsgBox "OK": End If
此1行版本失败,并显示“编译错误:如果没有块If,则结束:”
If 1 = 2 Then: MsgBox "impossible": Else: MsgBox "OK": End If
那么,如何与这些行为兼容地准确描述“:”的含义?
答案 0 :(得分:1)
冒号不能替代新行。
它允许您将多条语句放在一行上,但是出于语法目的,这仍然算作一行。
documentation特别显示了If
与冒号的使用:
使用单行格式,可以根据
If...Then
决定执行多个语句。所有语句必须在同一行上,并用冒号分隔,如下所示:If A > 10 Then A = A + 1 : B = B + A : C = C + B
“ single-line form”所在的位置
If condition Then [ statements ] [ Else elsestatements ]
与多行形式相反
If condition Then [ statements ] [ ElseIf condition-n Then [ elseifstatements ]] [ Else [ elsestatements ]] End If
您在一行上放置了多个语句,但是仍然使用If
语句的单行形式,而没有End If
。
答案 1 :(得分:0)
冒号:
允许您在同一行上放置2条或更多条指令。
Then
具有2种语法:
If expression Then instruction 'case a
或
If expression Then 'case b
somecode
'optional Else / ElseIf
End If
从您的观察看来,Then
必须是行b中的最后一条指令。
我发现:
在以下两种情况下更有用:
使用Select Case
Select Case x
Case 1: DoThis
Case 2: DoThat
End Select
使用Dim
(如果您不需要所有Dims都位于过程顶部)
Dim Somevalue as long: SomeValue = 3
答案 2 :(得分:0)
冒号允许您在一行上写一条语句,并表示有效VBA语句的结尾。
但是,根据任何else
语句的出现,某些冒号可以省略(或由VBA编辑器自动添加)。在某些情况下,End if
也可以省略
例如,如果一行语句写为:
If 1 = 2 Then MsgBox "impossible" Else: MsgBox "OK"
请注意,没有End if
。您的2行语句在语法上是错误的,并且会引发错误。