Как создать настраиваемое меню на листе 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

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

The first level, in this exercise, is arbitrarily placed as the tenth item on the menu bar, as you will see when the full width of the workbook is displayed.

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

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

The code below is a start. It will be triggered when the workbook is opened or closed. Copy it into a module in your workbook

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

Option Explicit

Sub auto_Open()
    Call DeleteMenu
    Call CreateMenu
 End Sub
 
Sub auto_Close()
    Call DeleteMenu
End Sub

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

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

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

Кодекс

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

Sub CreateMenu()
'   Called from Auto_Open. 'NOTE: There is no error handling in this subroutine
    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")
    Call DeleteMenu

    sRow = 2 '   start row
    
'   Add menus using the structure as per the MenuSheet
    Range("A" & sRow).Select
    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 ' Add the top-level menu to the Worksheet CommandBar
                Set MenuObject = Application.CommandBars(1). _
                    Controls.Add(Type:=msoControlPopup, _
                    Before:=PositionOrMacro, _
                    Temporary:=True)
                MenuObject.Caption = Caption
            Case 2 ' A Menu Item
                If NextLevel = 3 Then
                    Set 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 ' A SubMenu Item
                Set 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).Select '***************************************
    Loop
    Sheets("Dashboard").Activate
End Sub

Sub DeleteMenu()
'   This sub will be executed when the workbook is closing
    Dim MenuSheet As Worksheet
    Dim sRow As Integer
    Dim Caption As String
    
    On Error Resume Next
    Set MenuSheet = ThisWorkbook.Sheets("MenuSheet")
    sRow = 2
    Range("A" & sRow).Select
    Do While ActiveCell > ""
        If MenuSheet.Cells(sRow, 1) = 1 Then
            Caption = MenuSheet.Cells(sRow, 2)
            Application.CommandBars(1).Controls(Caption).Delete
        End If
        sRow = sRow + 1
        Range("A" & sRow).Select
    Loop
   
    On Error GoTo 0
End Sub

Sub SelectDashboard()
    Sheets("Dashboard").Activate
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 "Close! (write your own code in the module)"
End Sub

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

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

Excel временами работает нестабильно и дает сбой при открытии, повреждая исходный файл. Если не удается восстановить файл, полезно иметь инструмент для восстановления Эксель урон otherwise all unbacked- up work will be lost.

Об авторе:

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

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

Комментарии закрыты.