Страница 1 из 2

Excel-форма с кнопкой-КакЗапуститьПрограммуИз файла макросов

Добавлено: 08 ноя 2005, 10:06
anval
В форме есть кнопка «Вычислить», нажатие на которую должно инициировать выполнение программы «Счет». Если программа находится в модуле того же файла, в котором расположена и форма, то вызов этой программы осуществляется просто
Private Sub Вычислить_Click()
Call Счет
End Sub
Как нужно написать обращение к программе, если она находится в отдельном файле макросов, который находится на общем для пользователей диске в определенном каталоге например, «P/ОбщиеПапки/МО/Макросы.xls»(P – имя общего диска)Спасибо

Добавлено: 08 ноя 2005, 10:58
Zigi
Я бы сделал так:

Код: Выделить всё

Workbooks.Open Filename:= "P:\ОбщиеПапки\МО\Макросы.xls"
Windows("ХХХ.xls").Activate
Application.Run "'Макросы.xls'!Счет"
Windows("Макросы.xls").Activate
ActiveWorkbook.Close
Но наверняка существует более правильный способ :D

Добавлено: 08 ноя 2005, 11:12
anval
Zigi, спасибо, попробовала, получилось. Но если у кого-нибудь есть еще варианты - присылайте, буду признательна.

Добавлено: 24 ноя 2005, 05:16
Naeel Maqsudov
Дык,

Application.Run "'P:\ОбщиеПапки\МО\Макросы.xls'!Счет"
Workbooks("Макросы.xls").Close


Если макрос надо будет запускать неоднократно, то вторую строчку лучше заменить на
Workbooks("Макросы.xls").Windows(1).Visible = False
Тогда книга с макросами останестся открытой но будет невидимой и при повторном запуске на экране не будет мигать ничего.

==========
Еще можно книгу с макросами переименовать в Макросы.xla
Это надстройка. Она всегда открывается и не показывается.
Это пожалуй самый лучший способ.

тут достаточно только
Application.Run "'P:\ОбщиеПапки\МО\Макросы.xla'!Счет"

Добавлено: 24 ноя 2005, 15:50
anval
Naeel Maqsudov, спасибо за вариант.
А как я смогу привязать к кнопке, элементу меню или пиктограмме панели инструментов макрос из надстройки? В диалоговом окне "Назначить макрос" среди списка книг, из которых выбирается макрос, имя надстройки не фиксируется.

Добавлено: 24 ноя 2005, 21:27
Avsha
Если использовать панели управления ...
При создании надстройки лучше сразу создать панель управления, кнопки или пункты меню которой запускают макросы этой книги, и вложить ее в надстройку, тогда при подключении надстройки в Excel эта панель будет автоматически выскакивать и корректно работать независимо от того из какой книги вы запускаете макросы надстройки.

Ну естественно кнопки и меню можно по своему назвать и назначить иконки.

Вопрос панелей управления для надстроек еще отражен в теме ...
Перенос личной панели инструментов Excel на другой ПК
forum/viewtopic.php?t=4595

Добавлено: 25 ноя 2005, 08:58
anval
Avsha, спасибо. Вложенные в книгу панели инструментов я у себя использую, правда, книга - не надстройка, а EXCEL-ий шаблон. С вложением панели в надстройку - понятно. Но у меня такая схема - есть шаблон с панелями, есть книга макросов,в шаблоне в определенной ячейке находится отдельная кнопка - именно там мне удобно ее расположить. К этому случаю и относился вопрос - если книгу макросов записать как надстройку, как привязать эту кнопку к макросу из нее.

Добавлено: 01 дек 2005, 16:41
Avsha
А как я смогу привязать к кнопке, элементу меню или пиктограмме панели инструментов макрос из надстройки? В диалоговом окне "Назначить макрос" среди списка книг, из которых выбирается макрос, имя надстройки не фиксируется.
Т.е. вам необходимо запускать макросы с элементов управления, которые расположены непосредственно на рабочих листах Excel?
Тогда просто в редакторе VBA находите названия процедур и с предложенным Naeel Maqsudov синтаксисом запускаете:

Private Sub CommandButton1_Click()
Application.Run "'MyAddIn.xla'!Proba1"
End Sub

И похоже при изменении пути нахождения надстройки, функции все равно запускаются.

Добавлено: 02 дек 2005, 10:07
anval
Да, я организовываю непосредственно на листе(шаблоне) в нужном месте кнопку. Процедура, приведеная Вами выше, соответствует кнопке из панели "Элементы управления" и появление такой процедуры вызывается двойным кликом по кнопке. Я же беру кнопку из стандартной панели инструментов "Формы"(она мне больше подходит) .Такую кнопку связываю с макросом с.о. - активизирую кнопку, из контекстного меню выбираю - "Назначить макрос", из списка открытых книг(надстройки там не указываются) выбираю нужную, а из книги - нужный макрос. Другого способа связи такой кнопки с макросом я не знаю, жду подсказку, если он есть.

Добавлено: 02 дек 2005, 10:31
Avsha
anval,
Нажимаете Назначить макрос\Кнопка Создать
попадаете в скипты раздела Module1 в процедуру:

Sub Кнопка1_Щелкнуть()
' вызов кода из надстройки
End Sub

Процедура же для элемента управления кнопки CommandButton1 попадает в раздел листа рабочей книги, на котором расположена эта кнопка. И еще различается вид курсора мыши для этих элементов управления, в вашем - "лапка", в моем - обыкновенная стрелка.