У меня есть тип 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 & ")""")
где функция (х, у) = "ААА" дает:
обр(Рейтинг_.AAA)
как строка.
Я хотел бы получить 0,1 (0,2, если функция (x, y) = "AA", 0,3, если функция (x, y) = "A").
Заранее спасибо.
Evaluate
неявноApplication.Evaluate
- это не имеет ничего общего с VBA, это просто функция, представленная в библиотеке типов Excel; он оценивает выражения в контексте хост-приложения, например. именованные диапазоны, функции рабочего листа и т. д.: он ничего не знает ни о каком коде VBA. - person Mathieu Guindon   schedule 21.06.2019