If then Else Excel VBA - "End If" 需要吗?
Posted
技术标签:
【中文标题】If then Else Excel VBA - "End If" 需要吗?【英文标题】:If then Else Excel VBA - "End If" needed? 【发布时间】:2016-06-01 09:39:05 【问题描述】:所以我在 Excel vba 中写了一个 UDF:
function ...
if ... then ... else
for i... to ...
equations
...
next i
*
end function
现在我注意到,该函数似乎工作得很好,但是我想知道我是否不应该在代码中 (*) 的位置使用“end if”?如果我这样做了,我会收到一条错误消息,说明没有与该“end if”块对应的 IF,但是!?所以总的来说,在 if then else 结构中是否需要“end if”?提前致谢!
/edit: 'if ... then ... else' 是一个单行。但是 else 块确实包含多行,尤其是一个循环...
【问题讨论】:
如果你的 If 是一个单行(如果,然后,Else 在一行),你不需要 End If 复制实际代码,以便我们更好地查看。您可以执行 1 行 if 语句。如果它在单行上,则不需要 end if - 但 for 循环不是 if 的一部分。简而言之,for 循环会以任何一种方式运行。如果是多行,则需要结束if。 所有这些都在 VBA 帮助中有完整的描述。你读过吗? 【参考方案1】:如果将 IF THEN ELSE 放在一行中,则 if 条件在该行结束,无论如何都会执行下一行。
例如,
If true then x =1 else x = 2
y = 1
这个案例
如果为真,x 为 1,y 为 1
如果为假,x 为 2,y 为 1
if true then
x = 1
else
x = 2
y = 1
end if
这种情况,
如果为真,x 为 1,y 为空
如果为假,x 为 2,y 为 1
另外,如果你这样做了
If true then x = 1 else
x = 2
无论真假,x永远是2
【讨论】:
【参考方案2】:如果您不想要 END IF,但仍想要 IF、ELSE IF、ELSE,只需将所有内容写在一行中即可。 对多个操作使用“:”。
Sub test(Optional x As Long)
If x < 0 Then MsgBox "x<0" Else If x = 0 Then MsgBox "x=0": MsgBox "I told ya x=0" Else MsgBox "x>0": MsgBox "I told ya x>0"
End Sub
【讨论】:
【参考方案3】:是的,你需要 End If 语句,否则你会得到一个错误。
只有当您的 If 语句是单行语句时才不需要它,例如:
If 1 = 1# Then result = "true"
但是:
If 1 = 1# Then
result = "true"
除非像这样用 End If 关闭,否则不起作用:
If 1 = 1# Then
result = "true"
End If
无法准确了解您的函数结构,但如果它在没有 End If 的情况下工作,那么我猜它是一个有效的单行 If 语句,或者您的代码中某处有 On Error Resume Next。
【讨论】:
这个答案不正确,应该删除。 MutjayLee 有正确的答案。以上是关于If then Else Excel VBA - "End If" 需要吗?的主要内容,如果未能解决你的问题,请参考以下文章
If...Then...Else 在 Then 之后有多个语句