VBA如果条件为真,但实际上是假的,它有什么问题?

时间:2011-10-11 18:09:48

标签: vba if-statement

我在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

3 个答案:

答案 0 :(得分:8)

还没有人指出如何评估1 <= Speed < 25。首先,1 <= Speed被评估为TrueFalse,然后将该值与25进行比较。这需要将TrueFalse解释为整数。 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 ......依旧......不好......