Добрый день, уважаемые!
Хочу вот запускать несколько прог. кнопками в новой панели инструментов.
Проблема - программы были макросами, хранящимися в самих файлах. Для унификации решил перенести их в новую надстройку, там они работают прекрасно. Редактор ВБ их видит отлично.
Но их перестали видеть все кнопки!
Итак, есть кнопка в панели инструментов. Есть программа на ВБ, написанная в редакторе но вставленная в файл надстройки. Как сделать так, что бы она пускалась нажатием этой кнопки?
Первое ощущение - кнопки и иная лабуда видит МАКРОСЫ, а код на ВБ - не видит. Заранее спасибо!
Прицепить к кнопке в панели инструментов программу?
Модератор: Naeel Maqsudov
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Какое приложение? (Word, Excel...)
Что вы понимаете под надстройкой?
В Excel, например, файл .XLA является надстройкой. При инициализации надстройка добавляет свои кнопки/пункты меню. И все замечательно работает.
В Word для централизованного хранения макросов удобно использовать шаблоны, так как панель инструментов может быть сохранена в шаблоне и будет автоматически появляться при активации окна с документом, основанном на данном шаблоне. Чрезвычайно удобно.
В... Короче, что надо?
Что вы понимаете под надстройкой?
В Excel, например, файл .XLA является надстройкой. При инициализации надстройка добавляет свои кнопки/пункты меню. И все замечательно работает.
В Word для централизованного хранения макросов удобно использовать шаблоны, так как панель инструментов может быть сохранена в шаблоне и будет автоматически появляться при активации окна с документом, основанном на данном шаблоне. Чрезвычайно удобно.
В... Короче, что надо?

Эксел.
Ага, понятно. Механизм приблизительно ясен. Просто не работает механизм "подключения" макроса к кнопке. Что бы работало в том случае, если код лежит в надстройке, нужно прописывать кнопки в самом коде.
Тогда такой вопрос. В хелпе все это есть наверняка, только я добираюсь до него ночью - и тяжело с англ. а с ВБ совсем плохо.
Как прописать просто кнопку (напр. из "Формы") я понял, а как прописать (т.е. создать или описать имя ее) в коде кнопку из панели инструментов?
Спасибо за ответ, Наиль, вы подарите мне ночь спокойного сна!
Ага, понятно. Механизм приблизительно ясен. Просто не работает механизм "подключения" макроса к кнопке. Что бы работало в том случае, если код лежит в надстройке, нужно прописывать кнопки в самом коде.
Тогда такой вопрос. В хелпе все это есть наверняка, только я добираюсь до него ночью - и тяжело с англ. а с ВБ совсем плохо.
Как прописать просто кнопку (напр. из "Формы") я понял, а как прописать (т.е. создать или описать имя ее) в коде кнопку из панели инструментов?
Спасибо за ответ, Наиль, вы подарите мне ночь спокойного сна!
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
В модуль ThisWorkbook добавляем:
В модуль, например, Модуль1 кладем самое главное
- наш нужный макрос
Сохраняем это как обычную книгу и еще как надстройку.
Регистрируем надстройку (меню Сервис/Надстройки).
Теперь после включения надстройки бует появляться кнопка на стендартной панели инструментов и пункт в меню Сервис для запуска макроса QWE из нашей надстройки.
При отключения надстройки все удаляется.
Во время отладки у Вас накопится много лишних кнопок...
Прийдется удалять. Дело в том что при правке исходников значения глобальных переменных теряются и удаление кнопок не бует происходить нормамльно.
Чтобы в штатном режиме такого не происходило, перед сохранением надстройки исходники проекта лучше закрыть паролем, иначе при случайной правке получим как рах этот эффект.
Можно поступпить по другому:
Так как рабочие листы надстроек все равно не видны, то .Name добавленной кнопки можно сохранять в ячейку листа, а потом удалять кнопку, обратившись к ней по имени.
Код: Выделить всё
Dim mnu, btn As CommandBarButton
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call unregister
End Sub
Private Sub Workbook_Open()
Call register
End Sub
Private Sub register()
On Error Resume Next
Set mnu = Application.CommandBars("Tools").Controls.Add(msoControlButton, 2950)
mnu.Caption = "run the qwe"
mnu.OnAction = ThisWorkbook.Name & "!qwe"
Set btn = Application.CommandBars("Standard").Controls.Add(msoControlButton, 2950)
btn.Caption = "run the qwe"
btn.OnAction = ThisWorkbook.Name & "!qwe"
End Sub
Private Sub unregister()
On Error Resume Next
mnu.Delete
btn.Delete
End Sub

Код: Выделить всё
Sub qwe()
MsgBox 123
End Sub
Регистрируем надстройку (меню Сервис/Надстройки).
Теперь после включения надстройки бует появляться кнопка на стендартной панели инструментов и пункт в меню Сервис для запуска макроса QWE из нашей надстройки.
При отключения надстройки все удаляется.
Во время отладки у Вас накопится много лишних кнопок...

Прийдется удалять. Дело в том что при правке исходников значения глобальных переменных теряются и удаление кнопок не бует происходить нормамльно.
Чтобы в штатном режиме такого не происходило, перед сохранением надстройки исходники проекта лучше закрыть паролем, иначе при случайной правке получим как рах этот эффект.
Можно поступпить по другому:
Так как рабочие листы надстроек все равно не видны, то .Name добавленной кнопки можно сохранять в ячейку листа, а потом удалять кнопку, обратившись к ней по имени.
Спасибо, Наиль!
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Рано благодарите.
Хоть все работает, но весь этот изолретенный мною велосипед никуда не годится.
процедуру register надо изменить так
А процедуру unregister и глобальные переменные btn и mnu вообще убрать нафиг.
Фишка в следубщем:
Application.CommandBars("Standard").Controls.Add(msoControlButton, 2950,,,True)
Создает временную кнопку. Т.е. когда надстройка грузится она должна добавлять ВРЕМЕННУЮ кнопку, которая существует только на эотот сеанс MSExcel.
Хоть все работает, но весь этот изолретенный мною велосипед никуда не годится.
процедуру register надо изменить так
Код: Выделить всё
Private Sub register()
Dim Btn As CommandBarButton
On Error Resume Next
Set btn = Application.CommandBars("Tools").Controls.Add(msoControlButton, 2950,,,True)
btn.Caption = "run the qwe"
btn.OnAction = ThisWorkbook.Name & "!qwe"
Set btn = Application.CommandBars("Standard").Controls.Add(msoControlButton, 2950,,,True)
btn.Caption = "run the qwe"
btn.OnAction = ThisWorkbook.Name & "!qwe"
End Sub
Фишка в следубщем:
Application.CommandBars("Standard").Controls.Add(msoControlButton, 2950,,,True)
Создает временную кнопку. Т.е. когда надстройка грузится она должна добавлять ВРЕМЕННУЮ кнопку, которая существует только на эотот сеанс MSExcel.
::
)) отлично!
Только что делать с кучей кнопок ..... ::
)))
Не готов подробно рассказать о результатах - скажу только, что зацепка очень пригодилась. Правда, я полез по зацепке в хелп и наваял 2-й вариант - он добавляет не строки в "Сервис", а собственную панель с кнопками. Но не доделал, сморило.
Ночкой попробую Ваш.
Кстати, где территориально находитесь?

Только что делать с кучей кнопок ..... ::

Не готов подробно рассказать о результатах - скажу только, что зацепка очень пригодилась. Правда, я полез по зацепке в хелп и наваял 2-й вариант - он добавляет не строки в "Сервис", а собственную панель с кнопками. Но не доделал, сморило.
Ночкой попробую Ваш.
Кстати, где территориально находитесь?