Application.Evaluate ( "< > ") выдает ошибку приложения - PullRequest
0 голосов
/ 28 апреля 2020

Так что в одном из моих проектов у меня есть обратный вызов оценщика, который предлагает мне лямбда-подобный синтаксис для работы с массивами:

fMitPCInt = Mitigations.Filter(cbEqn, Eqn("$_::isInternal")).Map(cbMit, Eqn("$_.GetEFI(""" & sSeverityInt & """)"))

Это, по сути, генерирует обратный вызов, который вызывает Application.Evaluate (я знаю, что неэффективно, но это хороший синтаксис).

Если коротко, то в Excel365 Application.Evaluate("1") выдает ошибку. В результате тестирования я обнаружил следующее:

Application.Evaluate("3")   'throws error
Application.Evaluate("2")   'throws error
Application.Evaluate("1")   'throws error
Application.Evaluate("0")   'works
Application.Evaluate("-1")  'works
Application.Evaluate("-2")  'works
Application.Evaluate("-3")  'works
Application.Evaluate("1+0") 'works

По сути, Application.Evaluate просто не работает для положительных чисел в Excel365.

Как мы можем обойти эту проблему?

1 Ответ

0 голосов
/ 28 апреля 2020

Простое решение состоит в том, чтобы заменить Application.Evaluate() функцией EvaluateEqn(), определенной следующим образом:

Function EvaluateEqn(ByVal sCode as string) as variant
    if isNumeric(sCode) then
        EvaluateEqn = CDbl(sCode)
    else
        EvaluateEqn = Application.Evaluate(sCode)
    end if
End Function

Более долгосрочное трудное решение (но решение, которое я хочу сделать в какой-то момент) скомпилировать в AST и оценить потом. Это гарантирует, что код не зависит от кода типа Application.Evaluate, который мы не можем контролировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...