我在VBA中有一个Enum类型,我想将其用作数组的索引。问题是我想在运行时基于另一个函数的输入构造枚举。
所以我有
Enum Rating_
AAA = 1
AA = 2
A = 3
End Enum
和以下数组:
Dim arr(1 To 3) as Double
arr(1) = 0.1
arr(2) = 0.2
arr(3) = 0.3
我还有一个输出以下字符串之一的函数。该功能的内部运作方式无关紧要。为了解决这个问题,它可以只是一个字符串(Enum值之一):
funct(x,y) = "AAA"
funct(x,y) = "AA"
funct(x,y) = "A"
我要构造的是一个带有Enum调用的字符串,例如:
Dim str As String
str = "Rating_." & funct(x,y)
并将其与诸如以下的评估功能一起使用:
Evaluate("arr(" & str & ")")
上面的代码给出了一个错误:
错误2029
及以下
Evaluate("""arr(" & str & ")""")
其中funct(x,y)=“ AAA”给出:
arr(Rating_.AAA)
作为字符串。
我想要得到的是0.1(如果funct(x,y)=“ AA”,则为0.2;如果funct(x,y)=“ A”,则为0.3)。
谢谢。
答案 0 :(得分:2)
扩展@BigBen的评论,即字典可能就是您要寻找的东西,我同意他的看法,这是实现它的方式:
Sub tgr()
Dim Rating_ As Object
Set Rating_ = CreateObject("Scripting.Dictionary")
Rating_("AAA") = 1
Rating_("AA") = 2
Rating_("A") = 3
Dim arr(1 To 3) As Double
arr(1) = 0.1
arr(2) = 0.2
arr(3) = 0.3
Dim str As String
str = "AA" 'replace with your funct output here
MsgBox arr(Rating_(str)) '<-- returns 0.2, no Evaluate required
End Sub