VBA中boolean if语句的奇怪行为

Jus*_*ang 1 vba if-statement boolean

我编写了一个if语句,如下所示:

在此输入图像描述

你可以在这里看到我在这个语句中悬停了所有三个值,并且所有这些值都应该等于True值,因此if语句中的内容应该运行.但是,出于某种原因,当我执行此语句时,它会直接跳到End If代码的一部分.

有谁知道为什么只是看着这个?

GSe*_*erg 5

在VB中,AndOr运算符是按位的,不是逻辑的.它们对数字操作数执行按位运算,并且最后只能在逻辑上下文中考虑位操作的结果.

在你的榜样,你有True AND 13 AND 18,这是-1 AND 13 AND 18(在VB True等于-1),这将导致0,因为数字1318没有任何共同的位.最终隐含地理解零在False逻辑上下文中.

通常情况下,当你写一些东西If Len(str) Then而不是If Len(str) > 0 Then- 因为没有And或者Or弄乱结果时,你就会逃避它.
如果您确实在条件中使用它们,则应始终使用显式比较.然后,按位运算符将具有操作的布尔操作数,在这种情况下,它们的工作结果将与它们是逻辑运算符相同.
真正的逻辑运算符,AndAlso并且OrElse只在VB.NET中引入.如果你可以用Ands 替换你的AndAlsos,条件将评估为True(使用Option Strict Off,因为使用Option Strict On编译器会使你使用显式比较).

请注意,Null它与它无关.VB中可以接受Null逻辑上下文:If Null Then ... Else...是一个有效的构造.Null在这种情况下评估为False.