或 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
。
当我使用以下代码时它工作正常:
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
。