我在VBA中编写代码,根据一些输入参数将Access数据库中的数据提取到Excel。当谈到If语句时,检查“Speed”变量范围的标准之一是真的,但是,我检查了这个标准应该是错误的。 例如,速度= 49,VSP = 1.5,1 =速度&lt; 25,如果条件指示为真,这是荒谬的,并且VSP <0表示假,所以它进入第一个elseif条件,1&lt; =速度&lt; 25仍然表示true和0&lt; = VSP&lt; 3也是如此,然后函数返回Access数据库中的值。否则,如果速度= 49,VSP = 6.5,则该函数仍然执行“ElseIf(1 <=速度&lt; 25)和(0 <= VSP <3)然后,语句2”部分。它似乎只是始终将第一个elseif条件视为真。
我的if语句出了什么问题?有什么建议吗?
代码:
Function F (ByVal Speed, VSP as single)
.............
If (1 <= Speed < 25) And (VSP < 0) Then
statement 1
ElseIf (1 <= Speed < 25) And (0 <= VSP < 3) Then
statement 2
ElseIf (25<= Speed < 50)) And (0<= VSP <3) Then
statement 3
End if
End function
答案 0 :(得分:8)
还没有人指出如何评估1 <= Speed < 25
。首先,1 <= Speed
被评估为True
或False
,然后将该值与25
进行比较。这需要将True
或False
解释为整数。 True
被解释为-1
; False
被解释为0
。这两个都小于25
,因此表达式将始终评估为True
。
答案 1 :(得分:2)
这应该是以下内容:
Function F(ByVal Speed, VSP As Single)
If (1 <= Speed And Speed < 25) And (VSP < 0) Then
' statement 1
ElseIf (1 <= Speed And Speed < 25) And (0 <= VSP And VSP < 3) Then
' statement 2
ElseIf (25 <= Speed And Speed < 50) And (0 <= VSP And VSP < 3) Then
' statement 3
End If
End Function
答案 2 :(得分:0)
你的if是完全错的..你不能写那样的if ... 您应该每次检查一个条件,或者至少检查一个条件然后检查另一个条件,然后检查其他条件......
所以
If (1 <= Speed < 25) And (VSP < 0) Then
应该是
If (1 <= Speed) and (Speed < 25) And (VSP < 0) Then
我无法理解为什么你没有收到任何错误......
你做了什么,检查1&lt; =速度(可能是真的)然后检查为真&lt; 25 ......依旧......不好......