枚举条件行为:enum_Var = str1或str2

时间:2017-07-25 15:23:03

标签: vba excel-vba excel

(我将使用一个简单的例子,而不是我的原始代码,不相关)

我想使用If在枚举上发表Or声明。 Excel VBA编辑器建议使用这种语法:If current = Apple Or Peach Then(下拉选项,见下文)

截图

Screenshot

好吧,好奇,但为什么不呢。 我在测试时发现了行为不是预期的行为:

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)。我的问题与下拉列表建议有关。

2 个答案:

答案 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