powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Создание панели меню в Excel
8 сообщений из 8, страница 1 из 1
Создание панели меню в Excel
    #36685959
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выкладываю пример программного создания панели инструментов, - пригодится кому-нибудь. В данном примере создаётся панель "Группа" с кнопкой "Скрыть". Картинка кнопке присваивается по номеру 3987 - выбрана из набора встроенных меню.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
Public Sub Меню()
Dim MyBar As CommandBar, MyButton( 0 ) As CommandBarButton

On Error GoTo l1

Set MyBar = Application.CommandBars.Add("Группа", msoBarTop, False, True)

With MyBar.Controls
   Set MyButton( 0 ) = .Add(msoControlButton,  1 , , , True)
End With
With MyButton( 0 )
   .FaceId =  3987 
   .Caption = "Скрыть"
   .TooltipText = "Группировать и свернуть группы"
   .Style = msoButtonIconAndCaption
   .OnAction = "Группы"
End With

Set MyBar = CommandBars("Группа")

MyBar.Visible = True

Exit Sub

l1:
CommandBars("Группа").Delete
Resume

End Sub

Чтобы посмотреть все встроенные картинки запустите этот код и у вас появятся все панели с встроенным набором кнопок со значками:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Public Sub Кнопки() 'выдаёт все значки офиса
Dim m As Office.CommandBar, c1 As Office.CommandBarControl
Dim i As Integer, j As Integer, i1 As Integer, i2 As Integer

On Error GoTo l1

Application.DisplayStatusBar = True

For j =  0  To  10500  Step  500 
   Set m = CommandBars.Add("tmp" & j)
   
   i1 = j: i2 = i1 +  500 
   
   For i = i1 To i2
       Set c1 = m.Controls.Add(msoControlButton)
       
       c1.FaceId = i
       c1.Caption = i
       Application.StatusBar = i
       
       Set c1 = Nothing
   Next i
Next j
l1:
   Set c1 = Nothing
   Set m = Nothing
End Sub
При наведении мыши на кнопку высвечивается номер её картинки.

Запуск
Код: plaintext
1.
2.
3.
Private Sub Workbook_Open()
   Call Группа.Меню 
End Sub
лучше вызывать из события Открытие рабочей книги ("Эта книга" в Проекте VBA *.xla). Если вы делаете надстройку для Excel (*.xla), то вызывайте эту программу оттуда и панель будет появляться сразу при запуске надстройки. Программа Меню() находится в модуле Группа, поэтому вызывается с указанием полного имени Группа.Меню
Я не стал делать удаление панели инструментов, т.к. обычно надстройка используется до закрытия Excel. При очередном запуске панель проверяется на наличие по имени и если она уже создана, то пересоздаётся заново. Поэтому лучше для разных задач создавать панели с разными именами.
И ещё. Необходимо подключение встроенной библиотеки (Tools-References в проекте VBA) Microsoft Office 14.0 Object Library для работы Меню(). Подключаем ручками, но можно и автоматизировать и этот процесс (пример для ADO библиотек):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Public Sub WbkOpen()
Dim i As Integer

On Error Resume Next

i =  9 
'для Office 11 Object Library указать просто путь Shared\OFFICE11\MSO.DLL
Do 'минимум одна попытка присоединить ссылку на библиотеку ADO по имени файлов msado2(n).tlb
   i = i -  1 
   Err.Clear
   Application.VBE.ActiveVBProject.References.AddFromFile VBA.Environ("commonProgramFiles") & "\system\ado\msado2" & i & ".tlb"
Loop While Err.Number >  0  And i >=  0 

Call Группа.Меню 

On Error GoTo err_hndlr
'-вставка ссылки на проект текущей надстройки или т.п. в активную книгу кому надо
ActiveWorkbook.VBProject.References.AddFromFile ActiveWorkbook.path & "\" & ThisWorkbook.Name 
Exit Sub

err_hndlr:
If Err.Number <>  91  Then Resume Next 'ошибка 91 - не открыт файл рабочей книги

End Sub

Надеюсь, эти проги будут полезны, тем более, что задача эта повторяется из проекта в проект и при отладке отнимает много времени. Примеры для Офиса 2003.
============================================================================================================
"О, сколько нам открытий чудных готовит просвещения дух, и опыт - сын ошибок трудных, и гений - парадоксов друг, и случай - бог изобретатель" (Пушкин, однако).
...
Рейтинг: 0 / 0
Создание панели меню в Excel
    #36900101
yavorsky90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dab2,
Спасибо за код, он стал мне полезен. Я его немного переделал:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
Public Sub ADD_DB_Menu()
Dim MyBar As CommandBar
Dim GetIMS As CommandBarButton
Dim GetPivot As CommandBarButton

On Error GoTo l1

Set MyBar = Application.CommandBars.Add("Data Base", msoBarTop, False, True)

With MyBar.Controls
   Set GetIMS = .Add(msoControlButton,  1 , , , True)
   Set GetPivot = .Add(msoControlButton,  2 , , , True)
End With
With GetIMS
   .FaceId =  3987 
   .Caption = "Get IMS"
   .Style = msoButtonCaption
   .OnAction = "ShowForm"
End With
With GetPivot
   .FaceId =  3987 
   .Caption = "Get Pivot Table"
   .Style = msoButtonCaption
   .OnAction = "ShowFormPivot"
End With
Set MyBar = CommandBars("Data Base")

MyBar.Visible = True

Exit Sub

l1:
CommandBars("Data Base").Delete
Resume

End Sub

Но здесь возник один вопрос. При подключении настройки моя панель инструментов Data base всегда создается в новой строке (хотся между панелями инструментов есть место для нее). Можно ли сделать, чтобы моя панель вставлялась между остальными панелями, а не в новой строке.
...
Рейтинг: 0 / 0
Создание панели меню в Excel
    #36900577
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yavorsky90...При подключении настройки моя панель инструментов Data base всегда создается в новой строке (хотя между панелями инструментов есть место для нее). Можно ли сделать, чтобы моя панель вставлялась между остальными панелями, а не в новой строке.
Ответил http://www.planetaexcel.ru/forum.php?thread_id=20113] здесь
...
Рейтинг: 0 / 0
Создание панели меню в Excel
    #36900927
yavorsky90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZVI,

Спасибо за ответ, но ничего не помогло.


Сегодня обнаружил ещё одну проблему. Когда выхожу с файла Ексель и открываю его опять, то надстройка подключена, а панели нет. Помогите пожалуйста. Это моя первая надстройка и первая панель. Перечитал кучу форумов, еле создал. Хочется, чтобы работала, как надо.
...
Рейтинг: 0 / 0
Создание панели меню в Excel
    #36901498
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yavorsky90ZVI,

Спасибо за ответ, но ничего не помогло.


Сегодня обнаружил ещё одну проблему. Когда выхожу с файла Ексель и открываю его опять, то надстройка подключена, а панели нет. Помогите пожалуйста. Это моя первая надстройка и первая панель. Перечитал кучу форумов, еле создал. Хочется, чтобы работала, как надо.
Ответил http://www.planetaexcel.ru/forum.php?thread_id=20113] там же
Не учел, что панель и контролы в коде создаются как временные.
Замена в 3-х строках кода, содержащих .Add, последнего параметра с True на False решило проблему.
...
Рейтинг: 0 / 0
Создание панели меню в Excel
    #36939627
Poll2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А кто-нибудь знает как добавить кнопку на окна Excel, например в окно печати или окно предварительного просмотра?
...
Рейтинг: 0 / 0
Создание панели меню в Excel
    #36943870
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Poll2А кто-нибудь знает как добавить кнопку на окна Excel, например в окно печати или окно предварительного просмотра?
Вопрос об изменении встроенных диалоговых форм Excel не имеет отношения к теме панели инструментов, такие вопросы правильнее задавать в отдельной теме.

Штатных средств изменения встроенных диалоговых окон в Excel нет. Можете попытаться докировать свои контролы в окна lbfkjujd с помощью функций API, но это будет очень не просто.
...
Рейтинг: 0 / 0
Создание панели меню в Excel
    #36943871
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
окна lbfkjujd = окна диалогов :-)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Создание панели меню в Excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]