2017-07-25 44 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

感謝您的答案! –