Создайте вызов типа enum в виде строки и используйте функцию Evaluate в VBA. - PullRequest
0 голосов
/ 21 июня 2019

У меня есть тип Enum в 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, например:

Evaluate("arr(" & str & ")")

Приведенный выше код выдает ошибку:

Ошибка 2029

и следующие

Evaluate("""arr(" & str & ")""")

где funct (x, y) = "AAA" дает:

обр (Rating_.AAA)

в виде строки.

Я хотел бы получить 0,1 (0,2, если funct (x, y) = "AA", 0,3, если funct (x, y) = "A").

Заранее спасибо.

1 Ответ

2 голосов
/ 21 июня 2019

Расширяя комментарий @ 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
...