Как создать настраиваемое меню на листе Excel с помощью VBA

Поделись сейчас:

Ленту Excel можно изменить в соответствии с конкретной задачей. В этом упражнении создаются новые меню, указывающие пользователям на определенные листы, относящиеся к их задаче.

В этой статье мы расскажем, как создавать настраиваемые меню на листе Excel, например:Создавайте настраиваемые меню на листе Excel

В этой статье предполагается, что у читателя отображается лента «Разработчик» и он знаком с редактором VBA. Если нет, погуглите «Excel Developer Tab» или «Excel Code Window».

Workbook

Рабочая тетрадь, которая будет использоваться, состоит из нескольких листов. Мы предлагаем вам использовать образец, найденный здесь. Похоже на это.Образец рабочей тетради

Первые четыре листа являются нефункциональными и используются в этом упражнении только для целей навигации.

Пятый лист будет содержать настраиваемую структуру меню, характерную для этой книги. В настоящее время он должен быть пустым, за исключением кнопки «Тест».

Добавьте структуру меню

Скопируйте следующий блок текста в ячейку A1 листа «MenuSheet».

Уровень, Заголовок, Позиция/Макрос, Разделитель

1,&Инструменты пользователя,10

2, Показать панель инструментов, выбрать панель инструментов

2, Добавить новый, ИСТИНА

3,Клиент,ВыбратьКлиент

3,Местоположение,ВыберитеМестоположение

3,Менеджер,СелектМенеджер

2, Закрыть, Закрыть файл

Форматирование структуры меню

Эти данные CSV заканчиваются в столбце A. Чтобы отформатировать их в отдельные ячейки Excel, выберите столбец A и с помощью «Текст в столбцы» в Вкладка данных. Разделителем будет «запятая».Отформатируйте его в отдельные ячейки Excel

Вышеупомянутое, как только мы добавим соответствующий код, даст нам структуру меню на основе уровней слева.Структура меню на основе уровней

Первый уровень в этом упражнении — арбитраж.rarРазместите его как десятый элемент в строке меню, как вы увидите, когда отображается полная ширина рабочей книги.

Создание и удаление меню

Поскольку нам нужны новые меню только для этой конкретной книги, мы будем создавать и уничтожать их при открытии и закрытии книги.

Код ниже выглядит какtarт. Он будет срабатывать при открытии или закрытии книги. Скопируйте его в модуль в своей книге

Назначьте кнопку Test на MenuSheet для Auto_Open.

Опция Explicit Sub auto_Open() Вызов DeleteMenu Вызов CreateMenu End Sub Sub auto_Close() Вызов DeleteMenu End Sub

Ниже мы более подробно рассмотрим структуру нашего меню.Изучите структуру нашего меню более внимательно

Макрос не запускается Добавить новый потому что у него нет другой функции, кроме как в качестве родителя подменю.

Такая структура меню проста в обслуживании. Просто добавляйте новые элементы с их макросами, не забывая об уровне меню.

Кодекс

Добавьте к модулю следующий код VBA. Это позволит изучить «MenuSheet» и создать индивидуальное меню.

Sub CreateMenu() ' Вызывается из Auto_Open. ПРИМЕЧАНИЕ. В этой подпрограмме нет обработки ошибок Dim MenuSheet As Worksheet Dim MenuObject As CommandBarPopup Dim MenuItem As Object Dim SubMenuItem As CommandBarButton Dim sRow As Integer Dim MenuLevel, NextLevel, PositionOrMacro, Caption, Divider Set MenuSheet = ThisWorkbook.Sheets("MenuSheet ") Вызовите DeleteMenu sRow = 2 'start row 'Добавить меню, используя структуру в соответствии с диапазоном MenuSheet ("A" & sRow). Выберите Do While ActiveCell > "" '**************** With MenuSheet MenuLevel = . Cells(sRow, 1) Caption = .Cells(sRow, 2) PositionOrMacro = .Cells(sRow, 3) Divider = .Cells(sRow, 4) NextLevel = .Cells(sRow + 1, 1) End With Select Case MenuLevel Case 1 ' Добавьте меню верхнего уровня в CommandBar рабочего листа Set MenuObject = Application.CommandBars(1). _ Controls.Add(Type:=msoControlPopup, _ Before:=PositionOrMacro, _ Temporary:=True) MenuObject.Caption = Caption Case 2 ' Пункт меню Если NextLevel = 3, то установите MenuItem = MenuObject.Controls.Add(Type:=msoControlPopup) Else Set MenuItem = MenuObject.Controls.Add(Type:=msoControlButton) MenuItem.OnAction = PositionOrMacro End If MenuItem.Caption = Caption If Divider Then MenuItem.BeginGroup = True Case 3 ' Набор элементов подменю SubMenuItem = MenuItem.Controls.Add(Type:=msoControlButton) SubMenuItem.Caption = Caption SubMenuItem.OnAction = PositionOrMacro If Divider Then SubMenuItem.BeginGroup = True End Select sRow = sRow + 1 Range("A" & sRow). Выберите '*************************** *************** Loop Sheets("Dashboard").Activate End Sub Sub DeleteMenu() ' Этот подраздел будет выполняться при закрытии книги Dim MenuSheet As Worksheet Dim sRow As Integer Dim Заголовок в виде строки при ошибке Возобновить следующий набор MenuSheet = ThisWorkbook.Sheets("MenuSheet") sRow = 2 Range("A" & sRow).Выберите Do While ActiveCell > "" If MenuSheet.Cells(sRow, 1) = 1 Then Caption = MenuSheet.Cells(sRow, 2) Application.CommandBars(1).Controls(Caption).Удалить End If sRow = sRow + 1 Range("A" & sRow).Select Loop On Error GoTo 0 End Sub Sub SelectDashboard() Sheets("Dashboard").Активировать End Sub Sub SelectClient() Sheets("Client").Activate End Sub Sub SelectLocation() Sheets("Location").Activate End Sub Sub SelectManager() Sheets("Manager").Activate End Sub Sub CloseFile() MsgBox "Закрыть! (напишите свой код в модуле)" End Sub

Протестируйте код с помощью кнопки Test. Вновь созданное пользовательское меню находится в позиции 10 меню в разделе «Надстройки».

Восстановление Excel

Excel временами работает нестабильно и дает сбой при открытии, повреждая исходный файл. Если не удается восстановить файл, полезно иметь инструмент для восстановления Эксель урон в противном случае вся работа без резервных копий будетost.

Об авторе:

Феликс Хукер — эксперт по восстановлению данных в DataNumen, Inc., которая является мировым лидером в области технологий восстановления данных, включая ремонт rar и программные продукты для восстановления sql. Для получения дополнительной информации посетите www.datanumen.com

Поделись сейчас:

Оставьте комментарий

Ваш электронный адрес не будет опубликован. Обязательные поля помечены * *