sabato 13 settembre 2014

Modulo di classe in VBA Excel per gestire dall'esterno gli eventi di un oggetto

Comincio a vederci un po' più chiaro sull'uso dei moduli di classe...

Un modulo di classe potrebbe funzionare da gestore di eventi per un oggetto.
Proviamo un po'...

Innanzitutto, gestiamo l'evento direttamente da un foglio di Excel Codice del Foglio1
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    MsgBox "Il foglio è stato cliccato col destro!"
    Cancel = True
End Sub
E al click destro sul foglio si ottiene una MsgBox con il messaggio "Il foglio è stato cliccato col destro!".

Adesso facciamo con una classe: dopo aver cancellato il codice dalla finestra di codice del Foglio1, creo un modulo di classe e lo chiamo "gestore", con questo codice:
Dim WithEvents foglio As Worksheet

Private Sub Class_Initialize()
    Set foglio = Sheets(1)
End Sub

Private Sub foglio_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    MsgBox "Il foglio è stato cliccato col destro!"
    Cancel = True
End Sub
E istanzio la classe da Modulo 1 con questo codice:
Dim mioGestore As gestore
Sub main()
    Set mioGestore = New gestore
End Sub
Vado sul foglio, avvio main dalla finestra delle Macro, e quando vado a cliccare col destro sul foglio 1 ottengo lo stesso risultato, ossia una MsgBox con il messaggio "Il foglio è stato cliccato col destro!"

Nessun commento:

Posta un commento