和运营商在VBA

有人可以指导我如何快速了解vba中的逻辑。 我目前正在debugging一个代码,它包含如果条件使用AND操作符如下。

if (a and b) <> 0 then do something end if 

a并将数值分配给它,比较返回一个数字值。 我只是想知道如何使用和运算符来读取这种逻辑。 如果条件可能是(a> 5和b <5),我很熟悉。

提前致谢。

它正在做一个按位比较。 如果ab共享任何公共位(a and b) <> 0将返回TRUE

例如,如果a = 5 = 0101b = 6 = 0110a and b = 0100 = 4

没有更多的代码,这似乎是两个设置的比较。

基于位的字段通常用于跟踪标志/设置。 尽pipe数量有限(取决于架构中整数的大小),但它允许快速操作和testing。

所以,如果a0101 ,它将包含几个标志(基于位的数字从右侧开始)

 Flag 1 (1st bit) = On Flag 2 (2nd bit) = Off Flag 3 (3rd bit) = On Flag 4 (4th bit) = Off 

假设你有另一个variablesb ,它们也包含标志

 Flag 1 (1st bit) = Off (different than a) Flag 2 (2nd bit) = Off Flag 3 (3rd bit) = On Flag 4 (4th bit) = On (different than a) 

您可以使用按位运算快速比较它们:

 if (a and b) = 0101 and 1100 = 0100 = common flags if (a or b) = 0101 or 1100 = 1101 = all flags across both variable 

虽然a和b是数字的,但由于“和”的比较,它们被用作布尔值。 如果数字值为0,则它​​将被转换为FALSE。 否则,对于任何非零值,它将被视为TRUE

所以只有在a和b都不为零的情况下,上述条件才会被评估为TRUE。

你可以实际分配一个数值到一个布尔值来testing这个,例如

 Sub test() Dim a As Integer Dim abool As Boolean a = 1 abool = a MsgBox ("a:" & a & " abool:" & abool) End Sub 

在上面的例子中,你会得到“a:1 abool:True”的结果。