2017-07-25 40 views
1

(我会用一个简单的例子,而不是我的原代码,不相关)枚举条件的行为:enum_Var = STR1或者STR2

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

+0

写,如果情况─“如果电流=苹果或电流=桃然后” – Unknown

+0

@RamAnuragi呀,这个问题并没有问题,“问题”是更多关于编辑器行为与下拉列表建议。 –

+0

如果Enum被设置为位掩码,那么你可以将它们和在一起。这通常是在更大的VB6应用程序开发中完成的,这就是IDE为什么要这么做的原因。 – RBarryYoung

回答

1

也许因为ENUM通常是一些整数常量的表示并用于掩码。

所以,在你的榜样苹果= 0,桃= 1,香蕉= 2

随着OR和AND可以结合使用这些值,通常用于位掩码。 随着我们的例子值,它没有多大意义。通常你会使用比特值,如1,2,4,8,16。

如果你想设置一个选项,你可以说1或2,这将掩盖前2位(= 3)哪些将代表应该使用的两个选项。

+0

谢谢@Mono,我现在理解使用Enum和/或之间的逻辑。我会牢记这一点,因为它可能非常有用... –

1

如果你在你的Enum中设置了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 
+0

感谢您的答案! –