Creare le routine di evento

Finora ci siamo interessati di creare i controlli personalizzati di interfaccia, ora vediamo come associare i comandi al codice che deve essere eseguito quando operiamo sugli stessi. Creiamo un nuovo modulo di codice ed inseriamo il codice seguente.
	Dim CmdBarEvents As New Classe1

	Sub shortcut()
	Dim Corto As CommandBar
   
	Set Corto = Application.CommandBars.Add _
	 (Name:="SceltaRapida", Position:=msoBarPopup)
	Corto.Controls.Add.Caption = "&Voce 1"
	Corto.Controls.Add.Caption = "&Voce 2"
	Set CmdBarEvents.Bottone = Corto.Controls("&Voce 1")
	Set CmdBarEvents.Bottone1 = Corto.Controls("&Voce 2")
	End Sub

	Sub MostraCorto()
	Application.CommandBars("SceltaRapida").ShowPopup
	End Sub
    
La routine "shortcut()" crea un menų di scelta rapida, ovvero uno dei classici menų che appaiono quando clicchiamo col tasto destro del mouse. Nel nostro caso specifico il menų verrā visualizzato quando eseguiremo la routine "MostraCorto()", ovviamente dopo avere lanciato "Shortcut()".
La variabile "CmdBarEvents" dichiara una istanza della classe "Classe1" che contiene la routine di evento per i controlli che abbiamo creato. La dichiarazione riguarda anche le righe di "Set" alla fine della routine "Shortcut()". Quando facciamo click su "Voce1" attiviamo la routine "Bottone_Click" del modulo di classe "Classe1" mentre se facciamo click su "Voce2" attiviamo la routine "Bottone1_Click". Creiamo un nuovo modulo di classe dal menų "Inserisci", "Modulo di Classe", a cui verrā assegnato automaticamente il nome di "Classe1" ed inseriamo il codice seguente.
	Public WithEvents Bottone As Office.CommandBarButton
	Public WithEvents Bottone1 As Office.CommandBarButton

	Private Sub Bottone_Click(ByVal Controllo As _ 
	Office.CommandBarButton, CancelDefault As Boolean)
	MsgBox Controllo.Caption & _ 
	" č il controllo che hai selezionato"
	End Sub
	Private Sub Bottone1_Click(ByVal Controllo As _ 
	Office.CommandBarButton, CancelDefault As Boolean)
	MsgBox Controllo.Caption & _ 
	" č il controllo che hai selezionato"
	End Sub
    
L'uso della parola chiave "WithEvents", a cui abbiamo assegnato le variabili oggetto "Bottone" e "Bottone1" in cima al modulo, indica che le variabili di classe vengono usate per rispondere agli eventi attivati dai pulsanti ad essi collegati. Di conseguenza l'evento click dei controlli "Voce 1" e "Voce 2" č associato alle variabili "Bottone" e "Bottone1". Se clicchiamo su "Voce1" e "Voce 2" verrā visualizzata una finestra di messaggio che ci indica quale controllo č stato selezionato.
Vediamo ora come creare un pulsante tipo interruttore. Innanzitutto inseriamo un nuovo modulo di codice, creiamo un nuovo pulsante personalizzato nella barra "Standard" e lo posizioniamo come primo pulsante della barra.
	Dim ComBarEvent As New Classe2
	Sub Inserisci_Bottone()
	Dim IstBottone As Office.CommandBarButton
	Set IstBottone = Application.CommandBars("Standard")._
	Controls.Add(msoControlButton, , , before:=1)
	With IstBottone
		.Caption = "P&ulsante su"
		.State = msoButtonUp
		.FaceId = 2950
		.Tag = "Pulsante nuovo"
		Set ComBarEvent.Bottone = IstBottone
	End With
	End Sub
    
Creiamo un nuovo modulo di classe ed inseriamo il codice seguente. La routine valuta lo stato del pulsante associato: se lo stato č "msoButtonUp" (non premuto) viene impostato a "msoButtonDown" (premuto) e viceversa. Per fare compiere qualcosa di utile al nostro pulsante basta sostituire le MessageBox con delle istruzioni pių fantasiose.
	Private Sub Bottone_Click(ByVal Controllo As _ 
	Office.CommandBarButton, CancelDefault As Boolean)
	If Controllo.State = msoButtonDown Then
		Controllo.State = msoButtonUp
		MsgBox "Il punsalte NON č premuto"
	Else
		Controllo.State = msoButtonDown
		MsgBox "Il punsalte č premuto"
	End If
	End Sub
    
L'esempio seguente puō essere utile se vogliamo modificare le funzionalitā di un comando predefinito di Excel, . La routine disabilita le funzioni di una determinata voce del menų "File" alla quale noi potremo associare il nostro codice.
	Dim ComEvento As New Classe2
	Sub Annullamento()
	Dim BarCom As Office.CommandBarButton
	Set BarCom = CommandBars("File").FindControl(ID:=23)
	Set ComEvento.openctrl = BarCom
	End Sub
    
L'ID 23 corrisponde, nella mia versione di Office, al comando "Apri" sia nel menu "File" che nella barra "Standard". Spero sia lo stesso anche nella vostra versione, altrimenti potete ricercare l'ID associato del pulsante "Apri" con la routine "ControlliBarrecomando()" vista in precedenza.
	Public WithEvents openctrl As Office.CommandBarButton

	Private Sub openctrl_Click(ByVal Controllo As _ 
	Office.CommandBarButton, CancelDefault As Boolean)
	    CancelDefault = True
	    MsgBox Controllo.Caption & _ 
	    " il controllo č disabilitato"
	End Sub
    
Sostituendo la MessageBox con delle istruzioni pių significative avremo modificato il comportamento di un pulsante predefinito.

Cognolato Studio Š 2005