VBA中单行If Then语句后能否接单行ElseIf Then语句?
VBA中单行If后接ElseIf不执行的问题
使用环境:Microsoft Visual Basic for Applications 7.1、Microsoft Office Professional Plus 2013、Excel 2013
尝试在单行If Then语句后接续单行ElseIf Then语句时,发现ElseIf部分完全不执行,且无任何报错信息。以下是两段代码示例:
无法正常运行的代码
If WD = "Sat" Or WD = "Sun" Then State = "Z" ElseIf HH >= 16 Then State = "A" ElseIf HH >= 13 Then State = "B" ElseIf HH >= 5 Then State = "C" ElseIf HH >= 4 Then State = "D" ElseIf HH >= 0 Then State = "E"
可正常运行的多行结构代码
If WD = "Sat" Or WD = "Sun" Then State = "Z" ElseIf HH >= 16 Then State = "A" ElseIf HH >= 13 Then State = "B" ElseIf HH >= 5 Then State = "C" ElseIf HH >= 4 Then State = "D" ElseIf HH >= 0 Then State = "E" End If
问题解答
VBA的语法规则明确:单行If语句是一个完整独立的判断结构,它不需要End If收尾,整个逻辑在一行内完成。当你写下If WD = "Sat" Or WD = "Sun" Then State = "Z"这一行后,这个If结构已经结束了。
后面的ElseIf语句会被VBA判定为没有对应起始If的无效代码,因此不会被执行,也不会触发报错(VBA会直接忽略这类无效分支)。
只有采用多行If结构(即Then后换行,不把执行语句跟在同一行),才能合法接续ElseIf/Else分支,并且必须用End If闭合整个判断结构,这也是第二段代码能正常运行的原因。
结论:这种单行If后接ElseIf的写法在VBA中不可行,实现多分支判断必须使用带End If的多行结构。
内容的提问来源于stack exchange,提问作者NOYB
相关产品推荐
相关产品推荐

