Cum să creați meniuri personalizate în foaia de lucru Excel prin VBA

Distribuie acum:

Panglica Excel poate fi modificată pentru a se potrivi unei anumite lucrări. Acest exercițiu creează noi meniuri care indică utilizatorii către anumite foi relevante pentru sarcina lor.

În acest articol, vom prezenta cum să creați meniuri personalizate în foaia de lucru Excel, astfel:Creați meniuri personalizate în foaia de lucru Excel

Acest articol presupune că cititorul are afișată panglica pentru dezvoltatori și este familiarizat cu Editorul VBA. Dacă nu, vă rugăm să Google „Fila Dezvoltator Excel” sau „Fereastra Cod Excel”.

Workbook

Caietul de lucru care urmează să fie utilizat are un număr de foi. Vă sugerăm să utilizați exemplul găsit aici. Arata cam asa.Exemplu de registru de lucru

Primele patru foi sunt disfuncționale, fiind folosite în acest exercițiu doar în scop de navigare.

A cincea foaie va conține structura de meniu personalizată specifică acestui registru de lucru. În prezent, ar trebui să fie necompletat, cu excepția unui buton Test.

Adăugați structura meniului

Copiați următorul bloc de text în celula A1 a foii „MenuSheet”.

Nivel, Legendă, Poziție/Macro, Divizor

1,& Instrumente utilizator,10

2, Afișați tabloul de bord, selectați tabloul de bord

2,Adăugați nou, ,ADEVĂRAT

3,Client,SelectClient

3,Location,SelectLocation

3, Manager, SelectManager

2, Închide, Închide fișier

Formatați structura meniului

Aceste date CSV ajung în coloana A. Pentru a le formata în celule Excel individuale, selectați coloana A și utilizați „Text către coloane” în Fila date. Delimitatorul ar fi „virgulă”.Formatați-l în celule Excel individuale

Cele de mai sus, odată ce am adăugat codul corespunzător, ne vor oferi structura meniului pe nivel din stânga.Structura meniului pe nivel

Primul nivel, în acest exercițiu, este plasat arbitrar ca al zecelea element din bara de meniu, așa cum veți vedea când este afișată lățimea completă a registrului de lucru.

Crearea și distrugerea meniurilor

Deoarece vrem doar noile meniuri pentru acest registru de lucru specific, le vom crea și le vom distruge la deschiderea și închiderea registrului de lucru.

Codul de mai jos este un început. Se va declanșa la deschiderea sau închiderea registrului de lucru. Copiați-l într-un modul din registrul de lucru.

Atribuiți butonul Test din MenuSheet la Auto_Open.

Option Explicit

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

Mai jos, examinăm mai îndeaproape structura meniului nostru.Examinați mai îndeaproape structura meniului nostru

Nicio macrocomandă nu este declanșată de Adaugă nou deoarece nu are altă funcție decât cea de părinte al submeniurilor.

Acest tip de structură de meniu este ușor de întreținut. Pur și simplu adăugați elemente noi cu macrocomenzile lor, fiind conștienți de nivelul de meniu.

Codul

Adăugați următorul cod VBA la modul. Aceasta va examina „MenuSheet” și va crea meniul personalizat.

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

Testați codul cu butonul Test. Meniul utilizator nou creat va fi găsit la poziția 10 a meniului, sub Suplimente.

Recuperare Excel

Excel este instabil uneori și se blochează în timp ce este deschis, dăunând fișierului sursă. Acolo unde nu reușește să recupereze fișierul, este util să aveți un instrument de reparat deteriorarea Excel altfel, toată munca necopiată se va pierde.

Introducerea autorului:

Felix Hooker este un expert în recuperarea datelor DataNumen, Inc., care este lider mondial în tehnologiile de recuperare a datelor, inclusiv reparare fișiere rar și produse software de recuperare sql. Pentru mai multe informații vizitați www.datanumen.com

Distribuie acum:

Comentariile sunt închise.