VBA中If-ElseIf-Else语句输出不符合预期问题排查
VBA If-ElseIf 条件判断异常问题解答
这是个很典型的VBA语法坑!问题出在你写的连续比较表达式上——VBA不支持像数学公式那样把两个比较条件写在同一行的连续格式,比如18300 <= jaarinkomen < 36500这种写法的执行逻辑和你预期的完全不一样。
问题原因详解
当你写18300 <= jaarinkomen < 36500时,VBA会按从左到右的顺序分步计算:
- 先执行左边的
18300 <= jaarinkomen,这个表达式会返回布尔值:如果成立则返回True(对应数值-1),不成立则返回False(对应数值0)。 - 接着用第一步得到的结果和36500比较,也就是判断
-1 < 36500或者0 < 36500——这两个判断结果都是True!
所以只要你输入的数值大于等于18300,第一个ElseIf的条件就永远为True,后面的条件根本不会被触发,这就是为什么不管输入多大的数(只要超过18300)都会弹出第一个ElseIf的提示框。
修正后的代码
把每个连续比较拆成用And连接的两个独立条件,这样就能符合你的预期逻辑了:
Sub oefening1() Dim jaarinkomen As Long jaarinkomen = InputBox("Wat is uw jaarinkomen?") If jaarinkomen < 18300 Then MsgBox ("U zit in klasse minimumloon of lager") ElseIf jaarinkomen >= 18300 And jaarinkomen < 36500 Then MsgBox ("U zit in klasse benedenmodaal") ElseIf jaarinkomen >= 36500 And jaarinkomen < 73000 Then MsgBox ("U zit in klasse bovenmodaal") ElseIf jaarinkomen >= 73000 And jaarinkomen < 1000000 Then MsgBox ("U zit in klasse boven dubbelmodaal") Else MsgBox ("U zit in klasse miljonair") End If End Sub
另外还有个小优化:因为If-ElseIf是按顺序判断的,前面的条件不满足才会进入下一个,所以后面的条件可以省略左边界的判断,比如第二个ElseIf可以直接写jaarinkomen < 36500(因为能走到这里的肯定已经>=18300了),这样代码会更简洁:
Sub oefening1() Dim jaarinkomen As Long jaarinkomen = InputBox("Wat is uw jaarinkomen?") If jaarinkomen < 18300 Then MsgBox ("U zit in klasse minimumloon of lager") ElseIf jaarinkomen < 36500 Then MsgBox ("U zit in klasse benedenmodaal") ElseIf jaarinkomen < 73000 Then MsgBox ("U zit in klasse bovenmodaal") ElseIf jaarinkomen < 1000000 Then MsgBox ("U zit in klasse boven dubbelmodaal") Else MsgBox ("U zit in klasse miljonair") End If End Sub
内容的提问来源于stack exchange,提问作者User
相关产品推荐
相关产品推荐

