Jus*_*ang 1 vba if-statement boolean
我编写了一个if语句,如下所示:
你可以在这里看到我在这个语句中悬停了所有三个值,并且所有这些值都应该等于True值,因此if语句中的内容应该运行.但是,出于某种原因,当我执行此语句时,它会直接跳到End If
代码的一部分.
有谁知道为什么只是看着这个?
在VB中,And
和Or
运算符是按位的,不是逻辑的.它们对数字操作数执行按位运算,并且最后只能在逻辑上下文中考虑位操作的结果.
在你的榜样,你有True AND 13 AND 18
,这是-1 AND 13 AND 18
(在VB True
等于-1
),这将导致0
,因为数字13
并18
没有任何共同的位.最终隐含地理解零在False
逻辑上下文中.
通常情况下,当你写一些东西If Len(str) Then
而不是If Len(str) > 0 Then
- 因为没有And
或者Or
弄乱结果时,你就会逃避它.
如果您确实在条件中使用它们,则应始终使用显式比较.然后,按位运算符将具有操作的布尔操作数,在这种情况下,它们的工作结果将与它们是逻辑运算符相同.
真正的逻辑运算符,AndAlso
并且OrElse
只在VB.NET中引入.如果你可以用And
s 替换你的AndAlso
s,条件将评估为True
(使用Option Strict Off,因为使用Option Strict On编译器会使你使用显式比较).
请注意,Null
它与它无关.VB中可以接受Null
逻辑上下文:If Null Then ... Else...
是一个有效的构造.Null
在这种情况下评估为False
.
归档时间: |
|
查看次数: |
327 次 |
最近记录: |