VBA, если условие истинно, но на самом деле ложно, что с ним не так? - PullRequest
2 голосов
/ 11 октября 2011

Я написал код в VBA для извлечения данных из базы данных Access в Excel на основе некоторых входных параметров.Когда дело доходит до утверждения If, один из критериев, который проверяет диапазон переменной «Speed», истинен, однако я проверил, что этот критерий должен быть неправильным.Например, скорость = 49, VSP = 1,5, 1 <= скорость <25 в 1-м, если условие указывает на истину, что является нелепым, а VSP <0 указывает на ложное значение, поэтому оно переходит в 1-е условие, если 1 <= скорость <25 все еще указываетtrue и 0 <= VSP <3 также true, тогда функция возвращает значение из базы данных Access.Иначе, если скорость = 49, VSP = 6,5, функция все еще выполняет часть «ElseIf (1 <= Speed ​​<25) И (0 <= VSP <3) Тогда, оператор 2».Кажется, только первое условие условие elseif расценивается как истинное. </p>

Что не так с моим утверждением 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 ]

8 голосов
/ 11 октября 2011

Никто еще не указал, как оценивается 1 <= Speed < 25. Сначала 1 <= Speed оценивается как True или False, затем это значение сравнивается с 25. Это требует интерпретации True или False как целого числа. True интерпретируется как -1; False интерпретируется как 0. Оба значения меньше 25, поэтому выражение всегда будет иметь значение True.

2 голосов
/ 11 октября 2011

Это должно быть следующим:

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
0 голосов
/ 11 октября 2011

Ваш if полностью неверен .. вы не можете написать if таким образом ... Вы должны проверять одно условие каждый раз или, по крайней мере, проверять одно условие, а затем другое и затем другое ...

Итак

If (1 <= Speed < 25) And (VSP < 0) Then

Должно быть

If (1 <= Speed) and (Speed < 25) And (VSP < 0) Then

Я не мог понять, почему вы не получаете никаких ошибок в этом ...

Что вы?Вы сделали, имеет проверку на 1 <= скорость (это может быть истиной), а затем имеет проверку на истинность <25 ... и так далее ... ничего хорошего ... </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...