Inserimento di menù 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
    

Cognolato Studio © 2005