Vba 如何比较枚举?

Vba 如何比较枚举?,vba,ms-access-2013,Vba,Ms Access 2013,我在检查我的枚举是否相等时遇到了很多问题 我的枚举声明如下: Public Enum POKEMON_VERSION RED_BLUE_YELLOW = 1 GOLD_SILVER = 2 ... End Enum Const pokemonVersion As Variant = POKEMON_VERSION.GOLD_SILVER Public Sub Search_ButtonClick() Dim sql As String sql = Get

我在检查我的枚举是否相等时遇到了很多问题

我的枚举声明如下:

Public Enum POKEMON_VERSION
    RED_BLUE_YELLOW = 1
    GOLD_SILVER = 2
    ...
End Enum
Const pokemonVersion As Variant = POKEMON_VERSION.GOLD_SILVER
Public Sub Search_ButtonClick()
    Dim sql As String
    sql = Get_Pokemon(pokemonVersion ) 'which is GOLD_SILVER
    Me.mySubform.Form.RecordSource = sql
    Me.mySubform.Requery
End Sub 
我的表格是这样的:

Public Enum POKEMON_VERSION
    RED_BLUE_YELLOW = 1
    GOLD_SILVER = 2
    ...
End Enum
Const pokemonVersion As Variant = POKEMON_VERSION.GOLD_SILVER
Public Sub Search_ButtonClick()
    Dim sql As String
    sql = Get_Pokemon(pokemonVersion ) 'which is GOLD_SILVER
    Me.mySubform.Form.RecordSource = sql
    Me.mySubform.Requery
End Sub 
下面是我遇到问题的方法,我的switch语句:

  Public Function Get_Pokemon( version As Variant ) As String
     Select Case version
          Case version = RED_BLUE_YELLOW
              ' don't get ability or nature, didn't exist in this version
               Get_Pokemon = "SELECT * FROM ..." 
          Case version = GOLD_SILVER
               Get_Pokemon = "SELECT * FROM ..."
     End Select
  End Function
但是当我运行程序时,它发现
版本
在我的任何情况下都不匹配(在本例中,应该匹配GOLD\u SILVER)。我想问题可能是我在比较
变量
枚举
的“值”

我该如何解决这个问题


我不介意更改
Const pokemonVersion
的类型,但是枚举的“值”确实需要存储在
Const
变量中,这是我能想到的最好的方法

问题与
常量
枚举
无关。这与您的
Select
语法有关。您正在根据
版本
进行选择,因此案例必须是枚举的成员。执行此操作时(为清晰起见,添加了括号)

…它的评估结果是

Case (version = 1)
…因此,如果您为
版本
传递一个
红色_蓝色_黄色
,您将得到

Case (1 = 1)
…即:

Case True
    '...
Case False
    '...
Case False
'etc.
您可以更改
选择
以打开
True

Public Function Get_Pokemon(version As POKEMON_VERSION) As String
    Select Case True
        Case version = RED_BLUE_YELLOW
            ' don't get ability or nature, didn't exist in this version
             Get_Pokemon = "SELECT * FROM ..."
        Case version = GOLD_SILVER
             Get_Pokemon = "SELECT * FROM ..."
    End Select
End Function
…或者使用下面更清晰、更有效的语法:

Public Function Get_Pokemon(version As POKEMON_VERSION) As String
    Select Case version
        Case RED_BLUE_YELLOW
            ' don't get ability or nature, didn't exist in this version
             Get_Pokemon = "SELECT * FROM ..."
        Case GOLD_SILVER
             Get_Pokemon = "SELECT * FROM ..."
    End Select
End Function

我怀疑
作为变体
是困难的根源。这可能是《口袋妖怪版本》@RobertHarvey我是VBA新手,但当我尝试将《口袋妖怪版本》=POKEMON\u VERSION.GOLD\u SILVER作为POKEMON\u VERSION.GOLD\u SILVER进行Const POKEMON\u VERSION时,我会收到错误消息
编译错误:预期:键入name
好的,所以Case VERSION=GOLD\u SILVER总是失败,即使VERSION=2和GOLD\u SILVER=2,很有趣。我认为这与类型有关。但是凯斯金银成功了!非常非常有趣。@rib.usa-这是因为
version=[anything]
True
,但是
version
是一个数字,而不是布尔值。这就像测试
如果2=True那么“…