VBA中的IF语句

11

我使用了一个if语句,但是出现了错误消息“End if without block if”。

我尝试在sub之前和if语句之后仅放置End if

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

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

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

End If

有什么想法吗?

谢谢。

5个回答

23
在您的情况下,您正在使用所谓的“一行语句”。
If (true) then MsgBox "No End If required!"

这个代码可以正常工作,而且不需要 End If 语句,因为它是一个 一行代码

因为你有一个 End If 语句,所以错误就会发生,因为你试图结束一个未开始的 If 语句(两个一行代码)。

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


你可以用另外两种方式来完成完全相同的事情。
1)
If (true) then _ 
    MsgBox "No End If required!"

2)

If (true) then
    MsgBox "End If required!!!"
End If

然而在你的情况下,更合适的决定似乎是使用如下的IfElseIf的组合

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

2
如果我是一个门外汉,这将真正为我澄清事情 :) 这也解决了错误的原因。 - Siddharth Rout

7

VBA中的If语句可以内联执行,如下所示:

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

或者像这样在多行上完成:

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

您的问题是同时混用了两种格式,请选择一种格式,这样就可以解决您的问题。


4
如果我是一个门外汉,这会让我非常清楚 :) 这也解释了错误的原因。 - Siddharth Rout

3

只有在使用多行格式时才能使用 End If

If something Then
    'do something
End If

2

只有两个选项吗?很惊讶没有人建议使用Select Case

Select Case IDtype
    Case "UK"
        sqluserfix = " & UserId & "
    Case "NE"
        sqluserfix = "(select USER_ID from USER_PARAMS where USER_ID2='" & UserId & "')"
End Select

1
虽然我很感谢你分享知识的努力,但现在这个答案似乎没有回答问题(例如Q:“为什么我的车不会启动?”A:“你可以坐公交车”)。将其作为评论发布到问题或已接受的答案上似乎更合适。如果您发现格式选项过于有限,则可以将知识作为新的(自我回答的)问题分享(例如“VBA中条件代码执行的选项是什么?”)并在此处添加评论以链接到该问题。或链接到现有的答案,如此答案:https://stackoverflow.com/a/19455552/2799887 - pjvleeuwen

1
在这种情况下使用ElseIf:
If IDtype = "UK" Then 
  sqluserfix = " & UserId & "
ElseIf IDtype = "NE" Then 
  sqluserfix = "(select USER_ID from USER_PARAMS where USER_ID2='" & UserId & "')"
End If

顺便说一下,这些语句也可以像这样:
If IDtype = "UK" Then 
  sqluserfix = " & UserId & "
End If

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

在VBA中格式化代码向您展示如何以正确的方式执行此操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接