(我将使用一个简单的例子,而不是我的原始代码,不相关)
我想使用If
在枚举上发表Or
声明。 Excel VBA编辑器建议使用这种语法:If current = Apple Or Peach Then
(下拉选项,见下文)
好吧,好奇,但为什么不呢。 我在测试时发现了行为不是预期的行为:
Public Enum Fruit
Apple
Peach
Banana
End Enum
Public Sub pick()
Dim current As Fruit
current = Banana
If current = Apple Or Peach Then
'//The condition is True
MsgBox "Toc"
End If
End Sub
实际上,在此代码中,If
为True。不是我不知道为什么:我认为Peach
被评估为整数左右,与0不同,它是true
。证明,如果在Enum Fruit
声明中,Peach
被强制为0,则为False
。
Public Enum Fruit
Apple
Peach = 0
Banana
End Enum
Public Sub pick()
Dim current As Fruit
current = Banana
If current = Apple Or Peach Then
'//The condition is False this time
MsgBox "Toc"
End If
End Sub
我的问题(是的,对于理解来说并不重要):为什么编辑会在上面的屏幕截图中向我推荐这个下拉列表?我觉得那里隐藏着一些东西......
修改
我不是在寻找一种写这种情况的方法(因为它很明显If current = Apple Or current = Peach Then
)。我的问题与下拉列表建议有关。
答案 0 :(得分:1)
可能因为ENUM通常是某些整数常量的表示并用于屏蔽。
所以在你的例子中,apple = 0,peach = 1,Banana = 2
使用OR和AND,您可以组合这些值,通常用于位屏蔽。 使用你的示例值,它没有多大意义。通常你会使用比特值,如1,2,4,8,16。
如果你想设置一个你可以说1或2的选项,这将掩盖前2位(= 3),这将代表两个选项应该被使用。
答案 1 :(得分:1)
如果你在你的枚举中设置n ^ 2个值,它将非常有用 - 或者也会有意义。我的代码可能比我的解释更有意义:
Public Enum Fruit
Apple = 1
Peach = 2
Banana = 4
End Enum
...
If (Apple Or Peach) ' The Or here is a binary Or. 1+2=3