Pulsanti di comando voci di menu

    
    La proprietà "Controls" dell'oggetto CommandBar restituisce l'insieme degli oggetti CommandBarControls, ovvero tutti i controlli presenti in una determinata barra degli strumenti. L'oggetto CommanBarControl rappresenta sia i comandi delle barre degli strumenti che le voci dei menu e condividono le stesse proprietà e gli stessi metodi. L'esempio seguente visualizza una serie di Messagebox che indicano il nome e l'identificativo di ogni controllo contenuto nella barra degli strumenti "Standard", ovverosia la barra che contiene i controlli: "nuovo", "apri", "salva", "stampa"...
    	Sub ControlliBarrecomando()
    	For ctr = 1 To CommandBars("Standard").Controls.Count
    		MsgBox ctr & ". Nome del controllo: " &  
    		CommandBars("Standard").Controls(ctr).Caption & ", _
    		identificativo del controllo: " & _
    		CommandBars("Standard").Controls(ctr).ID
    	Next ctr
    	End Sub
        
    Nel prossimo esempio si presuppone che il secondo controllo sulla barra dei comandi "Standard" sia un pulsante. L'elaborazione modifica lo stile del pulsante ed oltre all'icona viene aggiunto anche il nome del controllo. Se eseguiamo nuovamente la routine, la proprietà "Style" del controllo è riportata al valore originale ed il nome scompare.
    	Sub ControlloModificaStile()
    	Set c = CommandBars("Standard").Controls(2)
    	With c	
    	  If .Type = msoControlButton Then
    		If .Style = msoButtonIcon Then
    			.Style = msoButtonIconAndCaption
    		Else
    			.Style = msoButtonIcon
    		End If
    	  End If
    	End With
    	End Sub
        
    L'esempio seguente visualizza nella finestra immediata il codice identificativo del controllo "Apri…" del menù "File".
    	Sub ControlloID()
    	Debug.Print Application.CommandBars("File") _
    	.Controls("Ap&ri...").ID ' è la caption
    	End Sub
        
    Lanciando direttamente nella finestra immediata la successiva riga di codice, otteniamo lo stesso risultato della routine “ControlloID()”.
    	?Application.CommandBars("File").Controls("Ap&ri...").ID
        
    Nell'esempio seguente vengono dichiarati ed aggiunti due nuovi controlli nella barra dei comandi "Standard". Il primo è un pulsante di comando (CommandBarButton), mentre il secondo è una casella combinata (CommandBarComboBox). All'interno delle istruzioni With vengono definite le proprietà delle istanze di controllo appena create.
    	Sub CreaControlli()
    	Dim pulsante As Office.CommandBarButton
    	Dim combo As Office.CommandBarComboBox
    	
    	Set pulsante = Application.CommandBars("Standard") _ 
    	.Controls.Add(msoControlButton, , , Before:=23)
    	With pulsante
    		.BeginGroup = True
    		.Caption = "P&ulsante"
    		.FaceId = 2950
    		.Tag = "nuovo"
    	End With
    
    	Set combo = Application.CommandBars("Standard") _ 
    	.Controls.Add(msoControlComboBox)
    
    	With combo
    		.AddItem "Ciao", 1
    		.AddItem "Hello", 2
    		.AddItem "Bonjour", 3
    		.AddItem "Hallo", 4
    		.AddItem "Hola", 5
    		.DropDownLines = 3 
    		.DropDownWidth = 50 
    		.ListIndex = 1 
    	End With
    	End Sub
        
    Da notare:
    • L'attributo "Before" nella dichiarazione del pulsante indica in quale posizione della barra degli strumenti inserire il controllo. Se non viene definito, il controllo è inserito come ultimo controllo della barra.
    • La proprietà "BeginGroup" crea un gruppo di controlli all'interno della barra. Un gruppo si differenzia per una linea di demarcazione tra i comandi.
    • La proprietà "Faceid" identifica l'icona del pulsante.
    • La proprietà "Tag" crea un identificativo del controllo, tornerà utile quando cercheremo il controllo col metodo "FindControls".
    • La proprietà "DropDownLines" indica quante voci visualizzare nel controllo casella combinata quando selezionata.
    • La proprietà "DropDownWidth" indica la larghezza lista.
    • La proprietà "ListIndex" indica quale elemento della lista inserire di default.
    A questo punto, dopo avere imbrattato l'interfaccia di Excel, è doveroso iniziare a vedere il codice per ripristinare lo stato originario dei controlli di barre e menù.
    Il metodo che permette di ripristinare gli oggetti CommandBar è "reset".
    Ad esempio:
    	Sub RipristinaBarre()
    	Application.CommandBars("Standard").Reset
    	Application.CommandBars("Worksheet Menu Bar").Reset
    	Application.CommandBars("Formatting").Reset
    	End Sub
        
    La macro "RipristinaBarre()" ripristina lo stato originale della barra dei controlli standard, di formattazione e dei menù. Facciamo una prova e notiamo come i controlli appena creati siano spariti.
    Molto interessante è il metodo "FindControls", il quale cerca all'interno dell'insieme CommandBars tutti i controlli che hanno un determinato "Tag" o "ID". Ad esempio, dopo avere lanciato per 3 volte la routine "CreaControlli()", creata in precedenza, eseguiamo la seguente routine.
    	Sub FindControls()
    	Dim articolo As CommandBarControl
    	Dim gruppo As CommandBarControls
    	Set gruppo = Application.CommandBars.FindControls _
    	(Tag:="nuovo") ' funziona anche con id:=1
    	If Not gruppo Is Nothing Then
    		For Each articolo In gruppo
    			articolo.delete
    		Next articolo
    	End If
    	End Sub
        
    La routine precedente ha ricercato all'interno dell'insieme Commandbars tutti i controlli con Tag uguale a "nuovo". I comandi trovati sono stati eliminati