Создание пользовательского меню в VBA Excel для отдельной книги с помощью объекта CommandBars, который позволяет добавлять меню и кнопки к интерфейсу приложения.
Пользовательские меню в Excel
Создание пользовательских меню в Excel с помощью VBA — это мощный способ улучшить пользовательский интерфейс для рабочих книг с большим количеством макросов. Это позволяет быстро запускать часто используемые процедуры, не заходя в редактор VBA. Пользовательские меню особенно полезны для сложных рабочих книг, где автоматизация играет ключевую роль.
Существует несколько подходов к созданию пользовательских меню в VBA, но мы остановимся на использовании объекта CommandBars, так как это универсальный метод, работающий во всех версиях Excel, хотя и считается устаревшим для современной ленты.
Исследования показывают, что для современных версий Excel предпочтительнее кастомизация ленты через XML, но это требует более сложного подхода, включающего создание пользовательского интерфейса в формате XML и его загрузку через свойства рабочей книги. Это выходит за рамки данной статьи.
Создание пользовательского меню
Объект CommandBars позволяет в VBA добавлять меню и кнопки к интерфейсу Excel. Пример кода, представленный ниже, добавляет меню «Моё меню» с одним пунктом (кнопкой) «Запуск макроса».
Процедуры для размещения в стандартном модуле
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 |
'Создание нового меню "Моё меню" Sub AddCustomMenu() Dim cb As CommandBar Set cb = Application.CommandBars("Worksheet Menu Bar") Dim cbc As CommandBarControl ' Удаляем существующее меню, если оно есть On Error Resume Next cb.Controls("Моё меню").Delete On Error GoTo 0 ' Добавляем новое меню Set cbc = cb.Controls.Add(Type:=msoControlPopup) cbc.Caption = "Моё меню" ' Добавляем пункт меню Dim cbb As CommandBarButton Set cbb = cbc.Controls.Add(Type:=msoControlButton) cbb.Caption = "Запуск макроса" cbb.FaceId = 263 'Иконка для пункта меню cbb.OnAction = "MyMacro" End Sub 'Удаление существующего меню "Моё меню" Sub DeleteCustomMenu() On Error Resume Next Application.CommandBars("Worksheet Menu Bar").Controls("Моё меню").Delete On Error GoTo 0 End Sub 'Макрос, привязанный к пункту меню "Запуск макроса" Sub MyMacro() MsgBox "Кнопка работает, макрос запущен!" End Sub |
Цифровые коды иконок для пунктов меню смотрите на этом сайте.
Процедуры для размещения в модуле книги
Чтобы меню добавлялось автоматически при открытии рабочей книги и удалялось при закрытии, используются следующие события рабочей книги:
1 2 3 4 5 6 7 8 9 |
'Запускает создание меню "Моё меню" при открытии книги Private Sub Workbook_Open() AddCustomMenu End Sub 'Запускает удаление меню "Моё меню" при закрытии книги Private Sub Workbook_BeforeClose(Cancel As Boolean) DeleteCustomMenu End Sub |
Этот подход обеспечивает то, что меню присутствует только во время работы с конкретной рабочей книгой, что удобно для пользователей.
Где найти новое меню?
- В версиях до 2007 года пользовательское меню отображается в строке меню, что соответствует классическому интерфейсу. Это удобно для пользователей, привыкших к старому дизайну.
- В Excel 2007 и новее пользовательское меню появляется на вкладке «Надстройки». Обычно эта вкладка скрыта, так как изначально на ней нет элементов для отображения. После добавления пользовательского меню вкладка «Надстройки» отображается автоматически.
Сравнение методов создания меню
Версия Excel | Метод | Место отображения | Преимущества | Ограничения |
---|---|---|---|---|
До 2007 | CommandBars | Строка меню | Интуитивно для старых пользователей | До версии 2007 нет ограничений |
2007 и новее | CommandBars | Вкладка «Надстройки» | Работает во всех версиях, простота | Менее интегрировано в ленту |
2007 и новее | XML для ленты | Индивидуальная вкладка | Полная кастомизация, современный вид | Требует знания XML, сложнее в реализации |
Создание пользовательских меню в Excel с помощью VBA — это доступный способ улучшить интерфейс для пользователей. Метод с CommandBars универсален и вполне приемлем для современных версий Excel.