Почему метод Excel Evaluate является оценщиком общих выражений? - PullRequest
1 голос
/ 15 апреля 2010

В последнее время возникло несколько вопросов, связанных с методом Application.Evaluate, вызываемым из Excel VBA. Старый макроязык XLM также предоставляет функцию EVALUATE(). Оба могут быть весьма полезны. Кто-нибудь знает, почему представленный оценщик может обрабатывать общие выражения?

Моя догадка состоит в том, что Excel нужно было дать людям способ получить диапазоны от строковых адресов и получить значение именованных формул, и самым простым способом было открыть портал для оценщика выражений. (Справка по версии VBA говорит о том, что она предназначена для «преобразования имени Microsoft Excel в объект или значение».) Но, конечно, вам не нужна способность оценивать произвольные выражения просто для этого. (То есть Excel может предоставить метод Name.Evaluate или что-то еще.)

Application.Evaluate кажется вроде ... незаконченным. Его полное поведение не очень хорошо задокументировано, и есть немало причуд и ограничений (как описано здесь Чарльзом Уильямсом: http://www.decisionmodels.com/calcsecretsh.htm) с тем, что раскрыто.

Я полагаю, что ответом может быть просто «почему бы не разоблачить это?», Но мне было бы интересно узнать, какие дизайнерские решения привели к тому, что эта функция приняла форму, которую она делает. Если это не удастся, мне будет интересно услышать другие догадки.

1 Ответ

2 голосов
/ 15 апреля 2010

Ну, я думаю, что необходимо, чтобы VBA получил результат из Именованной формулы (или строки, содержащей формулу), (хорошо, есть и уродливый метод вставки формулы в запасную ячейку и последующего чтения результата , но, например, это не будет работать изнутри UDF).

В VBA сложно определить, содержит ли определенное имя ссылку на диапазон или формулу. Использование Evaluate работает для обоих случаев.

Иногда очень эффективно и проще создавать формулы Excel в виде строк и оценивать их, а не переносить все данные из Excel в VBA, а затем выполнять вычисления в VBA. (Получение данных из Excel в VBA дорого, а в современных реализациях .NET - еще хуже).

...