【问题标题】:Or operator in if statement not working as intended或 if 语句中的运算符未按预期工作
【发布时间】:2017-06-26 15:01:25
【问题描述】:

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

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

【问题讨论】:

    标签: excel vba divide-by-zero


    【解决方案1】:

    你运气不好。

    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

    【讨论】:

    • 好吧,正如我在问题中所说,使用 If xMin &lt;&gt; 0 Or xMax &lt;&gt; 0 Then 会给我一个错误。只有我问题中的第一个代码工作正常。
    • 是的,我刚刚注意到并修改了答案。注意你需要And,而不是Or
    • 但是如果我使用And,它会执行内部if语句:即:xMax = 350xMin = 0,会弹出除法错误。
    • 如您所说,它可以正常工作,这超出了我的理解。 VBA 要么是个笑话,要么不能进行简单的逻辑运算。我会接受你的回答,谢谢。
    • 您不能只检查xMin 的值吗?如果xMax 为0,则计算将返回0。仅当xMin 为0 时才会返回错误。
    猜你喜欢
    • 2021-08-19
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 2020-11-28
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多