Страницы: 1
RSS
VBA вызов функции из надстройки
 
День добрый!

Такая вот странная проблема возникла:

Имеется подключенная надстройка (мною написанная) ***.xlam, в ней прописаны некоторые функции (работа с текстом)...
Когда я их вызываю из ячейки листа открытой книги, то все работает, а когда пытаюсь сделать тоже самое из кода VBA, то он их в упор не видит...

Кто-нибудь может подсказать, с чем это может быть связано?..
 
Цитата
denis76 пишет: ... с чем это может быть связано?..
Могу (как далекий от макросов) только предположить, что обращение к ней должно быть как к пользовательской функции... ;)
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Код
MsgBox Application.Run("Надстройка.xlam!ИмяФункции", параметры, параметры)
Изменено: KuklP - 15.03.2013 13:39:09
Я сам - дурнее всякого примера! ...
 
И как это сделать?..
Насколько понимаю из теории, все функции из подключенных настроек должны быть видимы, также как и функции из соседних модулей исходной книги (если там специально Private не прописано)...
Однако почему-то этого не наблюдается...
Как-то по-иному обращаться - как? Пример есть какой-нибудь?..
 
Цитата
KuklP пишет:
Код
 MsgBox Application.Run("Надстройка.xlam!ИмяФункции", параметры, параметры) 

Только увидел...
Сейчас попробую...
 
Да, Application.Run работает, все нормально, спасибо большое...

Что-то я сразу не догадался его использовать...

Остается правда вопрос, почему потребовалось именно так вызывать, а по-обычному не сработало?..
 
Посмотрите, может функция объявлена как Private.
Или в области объявлений модуля есть строка: Option Private Module
Еще вариант: функция записана в модуле книги, а не в стандартном.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Нет, даже Public специально приписал, не помогает...
Модуль - самый стандартный, Module1 называется... Пока что-то не особо понятно, почему оно так...
 
Значит надо видеть как именно пытаетесь вызвать из кода и что говорит VBA при попытке вызова.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Обычно вызываю, типа :

a=f1(b)

Пишет -

Compile error:
Sub jr Function not defined
 
Выложите файл. 100% функция Private или модуль, в котором сама функция.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
скажите пожалуйста, правильно ли я понял - если у модуля изменить название, то все хранящиеся в нём функции можно будет вызвать только через Application.Run?
 
Максим,смотря где вы вызываете функцию и из чего. Если на рабочем листе используется функция, хранящаяся в надстройке, то изменение имени модуля никак не влияет на выполнение функции.
Если, опять же на рабочем листе, но функция в VBA модуле в книге xlsm или xlsb, то потребуется ссылка на книгу для ввода формулы на листе вида mybook.xlsb!myfunction(A1;A2) - например.
Для использования функции в модуле проекта VBA, можно использовать, как было предложено выше, Application.Run, а можно подключить проект, содержащий эту функцию к текущему проекту через Tools/References тогда к этой функции можно будет обращаться на прямую myfunction(3, 5) - например, если в вашем проекте есть функция с таким именем, то обращаться уже нужно будет с именем модуля modulename.myfunction.
Если вы будете именовать проекты уникальным образом полный вызов функции (при условии подключенного проекта Tools/VBAProject properties поле Project Name) будет vbaprojectname.modulename.myfunction(4,5)
Успехов.
 
большое спасибо за развёрнутый ответ!
Страницы: 1
Наверх