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

时间:2019-06-21 15:01:42

标签: excel vba enums evaluate

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

谢谢。

1 个答案:

答案 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