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那么“…