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