Як створити індивідуальні меню на вашому аркуші Excel за допомогою VBA

Поділитися зараз:

Стрічку Excel можна змінити відповідно до певної роботи. Ця вправа створює нові меню, які вказують користувачам на конкретні аркуші, що відповідають їх завданням.

У цій статті ми представимо, як створити індивідуальні меню на своєму аркуші Excel, наприклад:Створіть індивідуальні меню на своєму аркуші Excel

У цій статті передбачається, що на пристрої для читання відображається стрічка розробника та він знайомий з редактором VBA. Якщо ні, будь ласка, перегляньте Google “Вкладка розробника Excel” або “Вікно коду Excel”.

робочий зошит

Робоча книга, яка буде використовуватися, має ряд аркушів. Пропонуємо скористатися зразком, який можна знайти тут. Це виглядає так.Зразок робочої книги

Перші чотири аркуші непрацездатні, вони використовуються в цій вправі лише для навігаційних цілей.

На п’ятому аркуші міститься спеціальна структура меню, характерна для цієї книги. Наразі він повинен бути порожнім, за винятком кнопки «Тест».

Додайте структуру меню

Скопіюйте наступний блок тексту в комірку А1 аркуша “MenuSheet”.

Рівень, підпис, положення / макрос, розділювач

1, & Інструменти користувача, 10

2, Показати інформаційну панель, Виберіть інформаційну панель

2, Додати нову,, TRUE

3, Клієнт, SelectClient

3, Розташування, SelectLocation

3, менеджер, SelectManager

2, Close, CloseFile

Відформатуйте структуру меню

Ці дані CSV потрапляють у стовпець A. Щоб відформатувати їх у окремі комірки Excel, виберіть стовпець A та за допомогою 'Текст у стовпці' , Вкладка Дані. Розділювач буде "кома".Форматуйте його в окремі клітинки Excel

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

Перший рівень у цій вправі - арбітражrarily розміщений як десятий пункт у рядку меню, як ви побачите, коли відобразиться повна ширина книги.

Створення та знищення меню

Оскільки ми хочемо лише нові меню для цієї конкретної книги, ми будемо створювати та знищувати їх при відкритті та закритті книги.

Код нижче такийtarт. Це спрацює, коли книгу відкрито або закрито. Скопіюйте його в модуль у вашій книзі

Призначте кнопку Тест на 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

Перевірте код за допомогою кнопки Тест. Новостворене меню користувача можна знайти в позиції меню 10, у розділі Надбудови.

Відновлення Excel

Excel часом нестабільний і аварійно завершує роботу під час відкриття, пошкоджуючи вихідний файл. Якщо файлу не вдається відновити, корисно мати інструмент для відновлення Пошкодження Excel інакше вся розгорнута робота буде lost.

Вступ автора:

Фелікс Хукер - фахівець з відновлення даних у DataNumen, Inc., яка є світовим лідером у галузі технологій відновлення даних, в тому числі ремонт rar та програмні продукти для відновлення sql. Для отримання додаткової інформації відвідайте WWW.datanumen.com

Поділитися зараз:

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