VBA中的IF语句

use*_*325 8 excel vba excel-vba

我正在使用一个if给出错误消息的语句 End if without block if

我试过把它放在声明End if之前sub和之后if.

我还尝试end if在每个IF语句的末尾放置2个语句.

If IDtype = "UK" Then sqluserfix = " & UserId & "

If IDtype = "NE" Then sqluserfix = "(select USER_ID from USER_PARAMS where USER_ID2='" & UserId & "')"

End If
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

谢谢.

小智 18

在您的情况下,您正在使用所谓的单行语句

If (true) then MsgBox "No End If required!"
Run Code Online (Sandbox Code Playgroud)

这是有效的,不需要End If声明,因为它是一个单行.

因为你确实有一个End If语句,这就是错误发生的原因,因为你试图结束一个If尚未启动的语句(2个单行).

在C#中,例如;,分号用作行分隔符.在VB/VBA中,您可以使用Return键来分隔行.


你可以用另外两种方式做同样的事情

1)

If (true) then _ 
    MsgBox "No End If required!"
Run Code Online (Sandbox Code Playgroud)

2)

If (true) then
    MsgBox "End If required!!!"
End If
Run Code Online (Sandbox Code Playgroud)

然而,在你的情况下,它似乎是一个更适合的决定是使用的组合IfElseIf这样的

If IDtype = "UK" Then
    sqluserfix = " & UserId & "
ElseIf IDtype = "NE" Then
    sqluserfix = "(select USER_ID from USER_PARAMS where USER_ID2='" & UserId & "')"
End If
Run Code Online (Sandbox Code Playgroud)

  • + 1如果我是一个门外汉,这对我来说真的很清楚:)这也解决了错误的原因. (2认同)

lay*_*nee 7

VBA If语句可以像这样内联完成:

If IDtype = "UK" Then sqluserfix = " & UserId & "
Run Code Online (Sandbox Code Playgroud)

或者在多行上完成:

If IDtype = "NE" Then
    sqluserfix = "(select USER_ID from USER_PARAMS where USER_ID2='" & UserId & "')"    
End If
Run Code Online (Sandbox Code Playgroud)

您的问题是您同时混合两种,选择一种格式,您的问题将得到解决.

  • + 1如果我是一个门外汉,这对我来说真的很清楚:)这也解决了错误的原因. (4认同)