Или оператор, если оператор не работает, как предполагалось

Когда я использую следующий код, он работает нормально:

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,

Другие вопросы по тегам