将对枚举类型的调用构造为字符串并在 VBA 中的 Evaluate 函数中使用

Construct call to enum type as string and use in Evaluate function in VBA

我在 VBA 中有一个枚举类型,我想将它用作数组的索引。问题是我想在运行时根据另一个函数的输入构造枚举。

所以我有:

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

我还有一个函数可以输出以下字符串之一。该函数的内部工作方式无关紧要。为了解决这个问题,它可能只是一个字符串(枚举值之一):

funct(x,y) = "AAA"
funct(x,y) = "AA"
funct(x,y) = "A"

我想要构造的是一个带有 Enum 调用的字符串,例如:

Dim str As String
str = "Rating_." & funct(x,y)

并将其与 Evaluate 函数一起使用,例如:

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)。

提前致谢。

扩展@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