或 if 语句中的运算符未按预期工作

Or operator in if statement not working as intended

当我使用以下代码时它工作正常:

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 语句中工作?

你真倒霉。

VBA 不实现 短路 And,与 C、C++、Java 等不同。即使结果已知,它也会计算表达式中的每一项。在您的情况下,这意味着即使 xMin 为 0,也会评估 xMax / xMin

所以需要写成

If xMin <> 0 And xMax <> 0 Then
    If xMax / xMin > 2 Then
        'some code
    End If
End If

请注意,我已更正您条件中的错字:您需要 And 代替 Or