Или оператор, если оператор не работает, как предполагалось
Когда я использую следующий код, он работает нормально:
If xMin <> 0 Then
If xMax <> 0 Then
If xMax / xMin > 2 Then
'some code
End If
End If
End If
Но я хочу использовать только один оператор if, чтобы избежать ошибок деления, однако он дает мне Run-time error '11': Division by zero
:
If xMin <> 0 Or xMax <> 0 Then
If xMax / xMin > 2 Then
'some code
End If
End If
(Если мне удастся заставить вышеуказанный код работать), я планирую сделать это так:
If (xMin <> 0 Or xMax <> 0) And (xMax / xMin > 2) Then
'some code
End If
В чем причина этого и как я могу заставить это работать в одном операторе if?
1 ответ
Решение
Не повезло тебе.
VBA не реализует короткое замыкание And
в отличие от C, C++, Java и т. д. Он оценивает каждый термин в выражении, даже если результат уже известен. В вашем случае это означает, что xMax / xMin
оценивается, даже если xMin
это 0.
Так что вам нужно написать это как
If xMin <> 0 And xMax <> 0 Then
If xMax / xMin > 2 Then
'some code
End If
End If
Обратите внимание, что я исправил опечатку в вашем условии: вам нужен And
вместо вашего Or
,