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:
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ì.
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".
Quanto sopra, una volta aggiunto il codice appropriato, ci darà la struttura del menu basata sul livello a sinistra.
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.
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



