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 之后有多个语句

VBA If / Then基于记录计数

VBA编程06.控制语句

Excel2007 VBA复制整行到其它sheet

EXCEL VBA中单元格发生改变触发事件,怎么指定某个单元格

Excel VBA Application.Wait 方法 类似sleep