Невозможно вызвать встроенную функцию VBA с Application.Run

В VBA определенная пользователем подпрограмма или функция может быть вызвана с использованием метода Application.Run, например:

Application.Run "macroName", arg1 ', ...

что позволяет грубо моделировать делегатов в VBA. Однако встроенные функции VBA не могут вызываться таким же образом.

' Error 1004: Cannot run macro 'FileDateTime'. The macro may not be available ...
Debug.Print Application.Run("FileDateTime", "<some file path>") 

Учитывая строку имени встроенной функции, например, "FileDateTime", как можно вызвать эту функцию?

Одним из обходных путей может быть создание функций, которые просто возвращают результат встроенной функции. Но я ищу более прямое решение.


person cheezsteak    schedule 19.08.2014    source источник
comment
Лучше всего было бы обернуть базовую функцию в метод класса и использовать CallByName(inst, "MethodName" ...)   -  person Alex K.    schedule 21.08.2014
comment
Я не вижу преимущества определения класса по сравнению с определением копии функции, которая мне нужна, например. FileDateTime_. Просто кажется, что две обертки вместо одной.   -  person cheezsteak    schedule 21.08.2014


Ответы (1)


Для этого вам не нужен Application.run (и использование тоже было неверным):

Debug.Print FileDateTime("some file path")

РЕДАКТИРОВАТЬ: Альтернативой является написание собственного макроса:

function F_D_T(path as string)  
F_D_T = FileDateTime("somepath")  
end function

и вызовите этот макрос с помощью application.run

person Alex    schedule 19.08.2014
comment
См. Изменить: я пытаюсь использовать Application.Run для грубой реализации делегатов. И, пожалуйста, уточните, почему использование было неправильным. - person cheezsteak; 19.08.2014
comment
std - это просто какой-то модуль. Я разместил сырой код. Я урежу пример по мере необходимости. - person cheezsteak; 19.08.2014
comment
мне кажется, вы пытаетесь применить VB.net к vba... я могу ошибаться. Например, каков ожидаемый результат для следующей строки: files_mtimes = std.Mapped(FileDateTime, file_array)? - person Alex; 19.08.2014
comment
надеюсь, теперь пример достаточно прост. - person cheezsteak; 19.08.2014
comment
Я не думаю, что это возможно - вы можете смоделировать встроенную функцию с помощью макроса, но не наоборот. Когда вы используете встроенную функцию, вам нужно будет следовать ее правилу (параметр/использование). Короче говоря, application.run работает только с макросом, а не со встроенной функцией =( - person Alex; 19.08.2014