Come creare menu personalizzati nel tuo foglio di lavoro Excel tramite VBA

Condividi ora:

La barra multifunzione di Excel può essere modificata per adattarsi a un lavoro particolare. Questo esercizio crea nuovi menu che indirizzano gli utenti a fogli specifici relativi alla loro attività.

In questo articolo, introdurremo come creare menu personalizzati nel foglio di lavoro di Excel, in questo modo:Crea menu personalizzati nel tuo foglio di lavoro Excel

Questo articolo presuppone che il lettore abbia visualizzato la barra multifunzione dello sviluppatore e abbia familiarità con l'editor VBA. In caso contrario, Google "Excel Developer Tab" o "Excel Code Window".

Cartella di lavoro

La cartella di lavoro da utilizzare ha un numero di fogli. Ti consigliamo di utilizzare quello di esempio trovato qui. Sembra così.La cartella di lavoro di esempio

I primi quattro fogli non funzionano, poiché vengono utilizzati in questo esercizio solo a scopo di navigazione.

Il quinto foglio conterrà la struttura del menu personalizzata specifica per questa cartella di lavoro. Al momento dovrebbe essere vuoto ad eccezione di un pulsante Test.

Aggiungi la struttura del menu

Copia il seguente blocco di testo nella cella A1 del foglio “MenuSheet”.

Livello, Didascalia, Posizione/Macro, Divisore

1,&Strumenti utente,10

2,Mostra dashboard,Seleziona dashboard

2,Aggiungi nuovo, ,VERO

3,Cliente,SelezionaCliente

3,Posizione,Seleziona posizione

3, Gestore, Seleziona Gestore

2,Chiudi,ChiudiFile

Formatta la struttura del menu

Questi dati CSV finiscono nella colonna A. Per formattarli in singole celle di Excel, selezionare la colonna A e utilizzare 'Testo in colonne' nella Scheda dati. Il delimitatore sarebbe "virgola".Formattalo in singole celle di Excel

Quanto sopra, una volta aggiunto il codice appropriato, ci darà la struttura del menu basata sul livello a sinistra.La struttura del menu basata sul livello

In questo esercizio, il primo livello è posizionato arbitrariamente come decimo elemento della barra dei menu, come potrete notare visualizzando la cartella di lavoro a larghezza intera.

Creazione e distruzione di menu

Poiché vogliamo solo i nuovi menu per questa specifica cartella di lavoro, li creeremo e li distruggeremo all'apertura e alla chiusura della cartella di lavoro.

Il codice seguente è un punto di partenza. Verrà eseguito all'apertura o alla chiusura della cartella di lavoro. Copialo in un modulo della tua cartella di lavoro.

Assegnare il pulsante Test su MenuSheet a Auto_Open.

Option Explicit

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

Di seguito, esaminiamo più da vicino la nostra struttura di menu.Esamina più da vicino la struttura del nostro menu

Nessuna macro viene attivata da aggiungi Nuovo perché non ha altra funzione se non come genitore di sottomenu.

Questo tipo di struttura del menu è facile da mantenere. Aggiungi semplicemente nuovi elementi con le loro macro, essendo consapevole del livello del menu.

Il codice

Aggiungi il seguente codice VBA al modulo. Questo esaminerà il "MenuSheet" e creerà il menu personalizzato.

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

Testare il codice con il pulsante Test. Il menu utente appena creato si trova nella posizione 10 del menu, sotto Componenti aggiuntivi.

Recupero di Excel

Excel a volte è instabile e si arresta in modo anomalo quando è aperto, danneggiando il file di origine. Dove non riesce a recuperare il file, è utile avere uno strumento per riparare Eccellente danno altrimenti tutto il lavoro non sottoposto a backup andrà perso.

Introduzione dell'autore:

Felix Hooker è un esperto di recupero dati in DataNumen, Inc., che è il leader mondiale nelle tecnologie di recupero dati, tra cui riparazione rar e prodotti software di recupero SQL. Per maggiori informazioni visita www.datanumen.com

Condividi ora:

I commenti sono chiusi.