Inserimento di menu e barre con VBA

    

    Adesso proveremo a creare nuovi menù e barre dei comandi. Per fare ciò dichiariamo una nuova istanza dell'oggetto CommandBar ed assegniamola con l'istruzione "Set". L'esempio seguente crea un sottomenù nel menù file della barra dei menù.
    	Sub InserisciMenu()
    	Dim ModiMenu As CommandBar
    	Dim NuovoPopup As CommandBarPopup
    	Set ModiMenu = Application.CommandBars("File")
    	With ModiMenu.Controls
    		Set NuovoPopup = _ 
    		.Add(Type:=msoControlPopup, Before:=2)
    		NuovoPopup.Caption = "&Nuovo Menu"
    		NuovoPopup.Controls.Add.Caption = "&Voce 1"
    		NuovoPopup.Controls.Add.Caption = "&Voce 2"
    	End With
    	End Sub
        
    La routine identifica un nuovo Commandbar di nome "ModiMenu" e gli associa un' istanza del menù "File". Viene inoltre creata una nuova istanza di menù di popup di nome "Nuovopopup" ed assegnato come voce del menù "File" in seconda posizione. Infine vengono inserite 2 voci al nuovo sottomenù: "Voce 1" e "Voce 2". Dopo avere lanciato la nostra routine entriamo nel menù "File" di Excel e, se l'elaborazione è andata a buon fine, vedremo il sottomenù in seconda posizione.
    Nell'esempio precedente abbiamo creato un sottomenù di un menù già esistente. Ora proviamo ad apportare alcune modifiche alla nostra routine, per creare una nuova barra degli strumenti o un nuovo menù.
    	Sub InserisciMenu ()
    	Dim ModiMenu As CommandBar
    	Dim NuovoPopup As CommandBarPopup
    	
    	Set ModiMenu = CommandBars.Add(Name:="ModiMenu")
    	
    	With ModiMenu.Controls
    		Set NuovoPopup = .Add(Type:=msoControlPopup)
    		NuovoPopup.Caption = "&NuovoMenu"
    		NuovoPopup.Controls.Add.Caption = "&Voce 1"
    		NuovoPopup.Controls.Add.Caption = "&Voce 2"
    	End With
    	
    	ModiMenu.Protection = msoBarNoCustomize  
    	ModiMenu.Position = msoBarTop 
    	ModiMenu.Visible = True
    	End Sub
        
    La routine precedentemente descritta genera una nuova barra degli strumenti. Se sostituiamo l'istruzione
    Set ModiMenu = CommandBars.Add(Name:="ModiMenu")
    
    con
    
    Set ModiMenu = Application.CommandBars("Worksheet Menu Bar")
    genereremo invece una nuova voce nella barra dei menù.
    Da notare le ultime tre istruzioni della routine "InserisciMenu()".
    • La costante "msoBarNoCustomize" assegnata alla proprietà "Protection", impedisce agli utenti di personalizzare la barra degli strumenti appena creata.
    • La proprietà "Position" imposta la posizione della barra dei comandi. L'attributo "msoBarTop" posiziona la barra in testa. . L'attributo "msoBarBottom" posiziona la barra in fondo. Mentre "msoBarFloating" è l'attributo di default, in questo caso è definita una barra è mobile.
    • La proprietà "Visibile" rende la barra visibile.
    Forse avrete notato, che lanciando più volte la routine precedente "InserisciMenu()", viene generato un errore. Questo perché cerchiamo di generare più barre con lo stesso nome. La routine seguente elimina la barra degli strumenti generata da "InserisciMenu()", gestendo l'errore nel caso la barra non esista.
    	Sub DeleteBar()
    	On Error GoTo 1
    	Application.CommandBars("ModiMenu").delete
    	Exit Sub
    	1:
    	MsgBox "La barra non esiste: " & Err.Number _ 
    	& " " & Err.Description
    	End Sub
        
    La macro RipristinaTutto() invece scorre tutte le barre dei comandi. Se la barra appartiene alle barre proprie di Excel(BuiltIn = True) viene riportata alle impostazioni originali, mentre se è una barra personalizzata (BuiltIn = False) viene eliminata. Questa routine può tornarci molto utile quando facciamo numerose prove su barre e menù, per ristabilire lo stato originario dei comandi di Excel.
    	Sub RipristinaTutto()
    	Dim i As Integer
    	For i = 1 To Application.CommandBars.Count - 1
    		If Application.CommandBars(i).BuiltIn = True Then
    			Application.CommandBars(i).Reset
    		End If
    		If Application.CommandBars(i).BuiltIn = False Then
    			Application.CommandBars(i).delete
    		End If
    	    
    	Next
    	End Sub
        
    Molto spesso capita di dove aggiungere una voce al Menu di scelta rapida (per intenderci il menu che si attiva col tasto DX ) per lanciare una Macro. Il codice sotto ,sfruttando l´evento Workbook_Open , non fa altro che aggiungere una voce(nel nostro caso "Tua voce " ) che lancia la macro " Tua Macro ",memorizzata in un Modulo, nel nostro caso " Modulo1 ", da notare la riga di codice " Application.CommandBars("Cell").Controls("Tua Voce").Delete ", che cancella la voce dal Menu ,qualora vi fosse gia´, prima di aggiungerla

    Private Sub Workbook_Open()
        On Error Resume Next
        Dim NewControl As CommandBarControl
        Application.CommandBars("Cell").Controls("Tua Voce").Delete
        Set NewControl = Application.CommandBars("Cell").Controls.Add
        With NewControl
            .Caption = "Tua Voce"
            .OnAction = "Module1.Tua Macro"
            .BeginGroup = True
        End With
    End Sub
      
    albatros54(G.A.)©2016