Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Создание панели меню в Excel / 8 сообщений из 8, страница 1 из 1
14.06.2010, 15:42
    #36685959
dab2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание панели меню в Excel
Выкладываю пример программного создания панели инструментов, - пригодится кому-нибудь. В данном примере создаётся панель "Группа" с кнопкой "Скрыть". Картинка кнопке присваивается по номеру 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
14.10.2010, 18:06
    #36900101
yavorsky90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание панели меню в Excel
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
15.10.2010, 03:31
    #36900577
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание панели меню в Excel
yavorsky90...При подключении настройки моя панель инструментов Data base всегда создается в новой строке (хотя между панелями инструментов есть место для нее). Можно ли сделать, чтобы моя панель вставлялась между остальными панелями, а не в новой строке.
Ответил http://www.planetaexcel.ru/forum.php?thread_id=20113] здесь
...
Рейтинг: 0 / 0
15.10.2010, 11:26
    #36900927
yavorsky90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание панели меню в Excel
ZVI,

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


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

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


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

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


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