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