【问题标题】:If then Else Excel VBA - "End If" needed?If then Else Excel VBA - "End If" 需要吗?
【发布时间】: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 帮助中有完整的描述。你读过吗?

标签: excel vba if-statement udf


【解决方案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 有正确的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多