Kako kreirati prilagođene menije u Excel radnom listu putem VBA

Podijeli sada:

Excel traka se može modificirati tako da odgovara određenom poslu. Ova vježba kreira nove menije koji upućuju korisnike na određene listove relevantne za njihov zadatak.

U ovom članku ćemo vam predstaviti kako da kreirate prilagođene menije u vašem Excel radnom listu, ovako:Kreirajte prilagođene menije na svom radnom listu Excel

Ovaj članak pretpostavlja da čitač ima prikazanu traku programera i da je upoznat sa VBA Editorom. Ako ne, molimo Google "Excel Developer Tab" ili "Excel Code Window".

Radna sveska

Radna sveska koja se koristi ima nekoliko listova. Predlažemo da koristite uzorak koji se nalazi ovdje. To izgleda ovako.Uzorak radne sveske

Prva četiri lista su nefunkcionalna i koriste se u ovoj vježbi samo u svrhu navigacije.

Peti list će sadržavati prilagođenu strukturu menija specifičnu za ovu radnu svesku. Trenutno bi trebao biti prazan osim dugmeta Test.

Dodajte strukturu menija

Kopirajte sljedeći blok teksta u ćeliju A1 lista “MenuSheet”.

Nivo, natpis, pozicija/makro, razdjelnik

1,&Korisnički alati,10

2,Prikaži kontrolnu tablu,Odaberi kontrolnu tablu

2,Dodaj novo, ,TAČNO

3,Klijent,OdaberiKlijenta

3,Lokacija,Odaberi lokaciju

3, Menadžer, Odaberite Menadžer

2,Zatvori,Zatvori datoteku

Formatirajte strukturu menija

Ovi CSV podaci završavaju u koloni A. Da biste ih formatirali u pojedinačne Excel ćelije, odaberite kolonu A i koristite 'Tekst u kolone' u Kartica Podaci. Razdjelnik bi bio “zarez”.Formatirajte ga u pojedinačne Excel ćelije

Gore navedeno, nakon što smo dodali odgovarajući kod, daće nam strukturu menija zasnovanu na nivou sa leve strane.Struktura menija zasnovana na nivou

Prvi nivo, u ovoj vježbi, proizvoljno je postavljen kao deseta stavka na traci menija, kao što ćete vidjeti kada se prikaže puna širina radne knjige.

Kreiranje i uništavanje menija

Pošto želimo samo nove menije za ovu konkretnu radnu svesku, kreiraćemo ih i uništiti prilikom otvaranja i zatvaranja radne sveske.

Donji kod je početak. Pokrenut će se kada se radna sveska otvori ili zatvori. Kopirajte ga u modul u vašoj radnoj svesci.

Dodijelite tipku Test na MenuSheet-u Auto_Open.

Option Explicit

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

U nastavku ćemo detaljnije ispitati strukturu našeg menija.Pažljivije proučite našu strukturu menija

Nijedan makro se ne pokreće Dodaj novi jer nema nikakvu drugu funkciju osim kao roditelj podmenija.

Ovakva struktura menija je jednostavna za održavanje. Jednostavno dodajte nove stavke sa njihovim makroima, vodeći računa o nivou menija.

Kodeks

Dodajte sljedeći VBA kod u modul. Ovo će ispitati "MenuSheet" i kreirati prilagođeni meni.

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

Testirajte kod pomoću dugmeta Test. Novokreirani korisnički meni će se naći na poziciji menija 10, pod dodacima.

Excel Recovery

Excel je s vremena na vrijeme nestabilan i ruši se dok je otvoren, oštećujući izvornu datoteku. Tamo gdje ne uspije oporaviti datoteku, korisno je imati alat za popravku Excel šteta u suprotnom će sav rad bez sigurnosne kopije biti izgubljen.

Uvod za autora:

Felix Hooker je stručnjak za oporavak podataka DataNumen, Inc., koji je svjetski lider u tehnologijama za oporavak podataka, uključujući popravak rar-a i sql softverski proizvodi za oporavak. Za više informacija posjetite www.datanumen.com

Podijeli sada:

Komentari su zatvoreni.