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

时间:2017-06-26 15:01:26

标签: excel vba divide-by-zero

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

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 个答案:

答案 0 :(得分:4)

你运气不好。

与C,C ++,Java和c不同,VBA没有实现短路 And。它会评估表达式中的每个术语,即使结果已知。在您的情况下,这意味着即使xMax / xMin为0,也会评估xMin

所以你需要把它写成

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

请注意,我已修复条件中的拼写错误:您需要And代替Or