将对枚举类型的调用构造为字符串并在 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
我在 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