冒号运算符:
是VBA中的语句分隔符。
但是,是否有人知道为什么前三个例子有效,第四个(未注释时)产生错误?
Option Explicit
Public Sub TestMe()
If 1 = 1 Then: Debug.Print 1
If 2 = 2 Then Debug.Print 2
If 3 = 3 Then:
Debug.Print 3
' Gives error:
' If 4 = 4 Then
' Debug.Print 4
'Other Examples, from the comments and the answers:
:::::::::::::::::::::::::::: '<-- This seems to be ok
If 5 = 5 Then Debug.Print "5a"::: Debug.Print "5b"
If 6 = 0 Then Debug.Print "6a"::: Debug.Print "6b"
If 7 = 0 Then:
Debug.Print 7 ' Does not have anything to do with the condition...
If 8 = 0 Then Debug.Print "8a"::: Debug.Print "8b" Else Debug.Print "8c"
End Sub
答案 0 :(得分:12)
我认为混淆来自3
。我们认为3
和4
的行为应该相同。事实上,3
等同于:
If 3 = 3 Then: (do nothing) 'an empty statement
Debug.Print 3 ' <-- This will be executed regardless of the previous If condition
要查看它,请将3
更改为:
If 3 = 0 Then:
Debug.Print 3 '<-- 3 will be printed! ;)
总之,是的,:
确实是在一行上合并许多陈述
干得好@Vityata !!! :)
答案 1 :(得分:3)
如果Then Blocks需要匹配的End If它们是多行的。
第一种情况很好,因为Then之后的命令在同一行。
第二种情况没错,出于同样的原因,:在这种情况下没有任何区别。
第三种情况有效,因为当IF语句的计算结果为True时,&#39;后面没有命令:&#39;。 :向编译器发出信号,告知下一个命令应该在同一行上。没有任何跟随,因此处理移动到下一行,这被视为在If Then Block之外。
第四种情况没有告诉编译器If Then命令是单行,因此它正在寻找块的结束IF。
Option Explicit
Public Sub TestMe()
If 1 = 1 Then: Debug.Print 1 '<-- All on a single line - OK
If 2 = 2 Then Debug.Print 2 '<-- All on a single line - OK
If 3 = 3 Then: '<-- No command following :
Debug.Print 3 '<-- Seen as outside the If Then Block
' Gives error:
' If 4 = 4 Then
' Debug.Print 4
' End IF '<-- Required to show the end of the If Then block
End Sub