Как да създадете персонализирани менюта във вашия работен лист на Excel чрез VBA

Споделете сега:

Лентата на Excel може да бъде модифицирана, за да отговаря на определена работа. Това упражнение създава нови менюта, които насочват потребителите към конкретни листове, свързани с тяхната задача.

В тази статия ще ви представим как да създадете персонализирани менюта във вашия работен лист на Excel, като това:Създайте персонализирани менюта във вашия работен лист на Excel

Тази статия предполага, че на читателя е показана лентата за програмисти и е запознат с редактора на VBA. Ако не, моля Google „Раздел за програмисти на Excel“ или „Прозорец на кода на Excel“.

Workbook

Работната книга, която ще се използва, има няколко листа. Предлагаме ви да използвате примерния такъв, намерен тук. Изглежда така.Примерната работна книга

Първите четири листа са нефункционални и се използват в това упражнение само за навигационни цели.

Петият лист ще съдържа персонализираната структура на менюто, специфична за тази работна книга. Понастоящем трябва да е празно, с изключение на бутон Тест.

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

Копирайте следния блок текст в клетка А1 на листа „MenuSheet“.

Ниво, надпис, позиция / макро, разделител

1, & Потребителски инструменти, 10

2, Показване на таблото за управление, Избор на табло

2, Добавяне на ново,, ИСТИНА

3, Клиент, SelectClient

3, Местоположение, Изберете Местоположение

3, Manager, SelectManager

2, Close, CloseFile

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

Тези CSV данни завършват в колона А. За да ги форматирате в отделни клетки на Excel, изберете колона A и използвайте „Текст към колони“ в Раздел с данни. Разделителят ще бъде „запетая“.Форматирайте го в отделни клетки на Excel

Горното, след като добавим съответния код, ще ни даде структурата на менюто, базирана на ниво, вляво.Структура на менюто, базирана на ниво

Първото ниво в това упражнение е арбитражrarпоставен като десети елемент в лентата с менюта, както ще видите, когато се покаже цялата ширина на работната книга.

Създаване и унищожаване на менюта

Тъй като искаме само новите менюта за тази конкретна работна книга, ще ги създадем и унищожим при отваряне и затваряне на работната книга.

Кодът по-долу е катоtarт. То ще се задейства при отваряне или затваряне на работната книга. Копирайте го в модул във вашата работна книга

Задайте бутона 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

Тествайте кода с бутона Тест. Новосъздаденото потребителско меню ще бъде намерено на позиция 10 в менюто, Добавки.

Възстановяване на Excel

Excel понякога е нестабилен и се срива, докато е отворен, увреждайки изходния файл. Когато не успее да възстанови файла, е полезно да разполагате с инструмент за поправка Щети в Excel в противен случай цялата без резервна работа ще бъде lost.

Въведение на автора:

Феликс Хукър е експерт по възстановяване на данни в DataNumen, Inc., която е световен лидер в технологиите за възстановяване на данни, включително ремонт rar и sql софтуерни продукти за възстановяване. За повече информация посетете WWW.datanumen.com

Споделете сега:

Коментарите са забранени.