Страницы: 1
RSS
Запуск макроса, хранящегося в другой книге (без импорта в текущую)
 
Всем привет!
Есть книга Библиотека.xlsm, в ней модуль TestModule, а в нем макрос Test()
Помогите пожалуйста прописать путь к нему чтобы можно было запустить из другой книги (скажем книги А)
Получится ли запустить, если в книге А создать макрос с кодом:
Код
Application.Run "C:\Users\IMantrov\Desktop\......" 'полностью не получается прописать путь к макросу
И параллельно возник вопрос, есть ли смысл хранить код в книге? Или лучше просто экспортировать модуль на рабочий стол например в файле .bas. Если да, то как должен выглядеть путь к нему?
 
Здравствуйте. А если импортировать модуль во временную книгу,  выполнить код и временную книгу закрыть без сохранения.
Вот рабочий кусок кода с окна Immediate работает, импортирует модуль Module1.bas с рабочего стола в активную книгу.
Код
ActiveWorkbook.VBProject.VBComponents.Import (Environ("USERPROFILE") & "\Desktop\Module1.bas") 

Ну и допилить код можно, добавив выбор файла-модуля, а вот имя макроса нужно будет знать заранее.

Изменено: DANIKOLA - 04.07.2020 15:57:30
 
DANIKOLA, но ведь получается импорт идет в текущую книгу. Если закрыть ее без сохранения, то и все данные, которые макрос обработал и внес в нее, пропадут.
 
IvanMantrov, можно вместо ActiveWorkbook ставить ThisWorkbook. Макрос ведь может работать и с не активной книгой тоже, все эти тонкости нужно просто допиливать, тут просто идея, а вы решаете, что с ней делать.
Изменено: DANIKOLA - 04.07.2020 16:08:06
 
DANIKOLA, А в чем разница. Все равно речь об импорте. В книгу ничего не должно импортироваться, речь просто о выполнении кода, который хранится в каком-то внешнем источнике (в другой книге или в файле bas, не важно).
 
Динамически менять код VBA - очень плохая идея. Почитайте статью на сайте Дмитрия Щербакова "Как создать свою надстройку" (и другие материалы там же)
Для динамического запуска макросов предназначен метод Application.Run
Изменено: sokol92 - 04.07.2020 16:18:52
Владимир
 
sokol92, так ведь речи об изменении самого кода нет. Есть макрос, который постоянно обновляется. Чтобы каждый раз не рассылать пользователям новую версию, в которых они начинают путаться, проще менять код в одном файле, который будет храниться в сетевой папке, а файлы у пользователей просто будут выполнять этот код. Без изменения самого кода и без его импорта. Ради этого вся затея.
Изменено: IvanMantrov - 04.07.2020 16:28:13
 
Вы можете хранить надстройку и в сетевой папке (на форуме есть обсуждения на этот счет).
Изменено: sokol92 - 04.07.2020 16:40:59
Владимир
 
Путь прописывать научился:

Код
Application.Run "C:\Users\IMantrov\Documents\Библиотека.xlsm!Test"

но есть новая проблема. Ошибка: Не удается выполнить макрос. Возможно этот макрос отсутствует в книге или все макросы отключены.
 
Я бы тоже рекомендовал сделать файл надстройки и по мере необходимости рассылать пользователям. От них просто требуется старый файл заменить на новый. Думаю любой справится с такой задачей ))
 
Посмотрите тему по ссылке #8 в части хранения надстройки на сетевом ресурсе. Метод Application.Run вызывает метод уже открытой книги и указания пути к книге не требуется. В вашем примере (при условии, что книга Библиотека.xlsm открыта и макрос Test в ней не требует параметров):  
Код
Application.Run "Библиотека.xlsm!Test"
Изменено: sokol92 - 04.07.2020 21:23:36
Владимир
Страницы: 1
Наверх