|
| 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 |
|