VBA冒号“:”语句分隔符。它是如何工作的?

时间:2019-09-11 08:11:11

标签: vba

在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


那么,如何与这些行为兼容地准确描述“:”的含义?

3 个答案:

答案 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行语句在语法上是错误的,并且会引发错误。