Pulsanti di comando e voci di menù

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

Cognolato Studio © 2005