或运营商在if语句不按预期工作
当我使用下面的代码,它工作正常:
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
这背后的原因是什么,如何使它在一个如果陈述中工作?
你不走运。
VBA没有实现短路 And
C,C ++,Java和C不同。 即使结果是已知的,它也会对expression式中的每一项进行评估。 在你的情况下,这意味着即使xMin
为0, xMax / xMin
也会被计算。
所以你需要把它写成
If xMin <> 0 And xMax <> 0 Then If xMax / xMin > 2 Then 'some code End If End If
请注意,我已经在您的条件中修复了一个错字:您需要一个And
代替您的Or
。