注册 登录
编程论坛 VB6论坛

关于Elseif多级条件选择

ygxshanghai 发布于 2019-12-13 21:29, 1429 次点击
Option Explicit
Dim BMoney As Double

Private Sub Text2_Change()
If 20 > Val(Text2) > 0 Then
      BMoney = 5000
      Label16 = "20㎡以下,计:" & BMoney & "元"
  ElseIf 100 > Val(Text2) >= 20 Then
      BMoney = 10000
      Label16 = "20㎡(含)-100㎡,计:" & BMoney & "元"
  ElseIf 200 > Val(Text2) >= 100 Then
      BMoney = 15000
      Label16 = "100㎡(含)-200㎡,计:" & BMoney & "元"
  ElseIf 500 > Val(Text2) >= 200 Then
      BMoney = 20000
      Label16 = "200㎡(含)-500㎡,计:" & BMoney & "元"
  Else
      BMoney = 30000
      Label16 = "500㎡(含)以上,计:" & BMoney & "元"
End If
End Sub

'问题:当输入Text2为10时,结果为30000,即跳到“500㎡(含)以上”这档,而不是5000的"20㎡以下”这档,请帮助,谢谢。
1 回复
#2
风吹过b2019-12-14 13:18
20 > Val(Text2) > 0
这是哪个老师教的这样写逻辑运算表达式的。
-----------------
text2 = 10
20 > Val(Text2) > 0
运算第一步:
20>10 ,真
运算第二步
真》0,假      ,真相当于 -1,假相当于 0
所以最终结果=假。
所以跳到最后的 ELSE 去了。

应该写成:
20 > Val(Text2) and  Val(Text2) > 0
==============
修改
首先,你多次使用 val(text2) 这个函数,因取属性的操作很慢,建议这里保存到一个变量里。
其次,单变量多级IF,可以使用 select case 来选择。

select case val(text2)
    Case Is <= 0
        Label16 = "输入错误"
    Case Is < 20
      BMoney = 5000
      Label16 = "20㎡以下,计:" & BMoney & "元"
    Case Is < 100
      BMoney = 10000
      Label16 = "20㎡(含)-100㎡,计:" & BMoney & "元"
    Case Is < 200
      BMoney = 15000
      Label16 = "100㎡(含)-200㎡,计:" & BMoney & "元"
    Case Is < 500
      BMoney = 20000
      Label16 = "200㎡(含)-500㎡,计:" & BMoney & "元"
    Case Else
      BMoney = 30000
      Label16 = "500㎡(含)以上,计:" & BMoney & "元"
End Select
-----------------
1