或运营商在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