2017-07-25 6 views
1

(私は単純な例ではなく、私の元のコードではなく、関連を使用します)列挙条件の挙動:enum_Var = STR1またはSTR2

私はOrで、列挙型にIf声明を作りたかったです。好奇心が、なぜない、まあ

Screenshot

(ドロップダウン選択、下記参照)If current = Apple Or Peach Then:エクセルVBAエディタは、構文のこの種を使用することを示唆しました。 行動は1が期待しなかったことをテストしている間、私は考え出し:

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 

私の質問(ええ、不可欠ではない、理解のために):なぜ地獄は、エディタは、私は、上のスクリーンショットのように、このドロップダウン・リストを示唆していますか?そこに何かが隠されているような気がします...

バレンタイン、 ありがとうございました。

EDIT (それはIf current = Apple Or current = Peach Then明らかに静かであるように)私は、この条件を記述するための方法を捜しているわけではありません。私の質問は、ドロップダウンリストの提案に関連しています。

+0

書き込み状態であれば – Unknown

+0

@RamAnuragiうん、そのために問題なし「現在=アップルまたは現在=ピーチ続いた場合」、「問題は」の詳細であるAS-:私のコードは、おそらく私の説明よりも理にかなっていますドロップダウンリストの提案でエディタの動作 –

+0

Enumがビットマスクとしてセットアップされている場合は、ANDとORを一緒に使用できます。これは、VB6の大きなアプリケーション開発で頻繁に行われました。そのため、IDEがそれを提案しています。 – RBarryYoung

答えて

1

ENUMは通常、いくつかの整数定数の表現であり、マスキングに使用されるためかもしれません。 ORで

だからあなたの例ではリンゴ= 0、桃= 1、バナナ= 2

と、あなたは、多くの場合、ビットマスキングのために使用されるものの値を、組み合わせることができます。 サンプル値ではあまり意味がありません。通常、1,2,4,8,16などのビット値を使用します。

そして、何かのオプションを設定したい場合、最初の2ビット(= 3)をマスクする1 OR 2と言うことができます。両方のオプションを使用する必要があります。

+0

ありがとう@モノ、私は今、そして/または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

答えをありがとう! –