Creare gestori eventi a livello di applicazione in Excel
Articolo
Si applica a:
Excel 2007, Excel 2003, Excel 2002, Excel 2000
Riepilogo
Se si desidera che un particolare gestore eventi venga eseguito ogni volta che viene attivato un determinato evento, è possibile scrivere un gestore eventi per l'oggetto Application. I gestori eventi per l'oggetto Application sono globali, il che significa che finché Microsoft Excel è aperto, il gestore eventi viene eseguito quando si verifica l'evento appropriato, indipendentemente dalla cartella di lavoro attiva quando si verifica l'evento.
Questo articolo descrive come creare un gestore eventi a livello di applicazione e fornisce un esempio.
Ulteriori informazioni
Per creare un gestore eventi a livello di applicazione, è necessario seguire questa procedura di base:
Dichiarare una variabile per l'oggetto Application usando la parola chiave WithEvents. La parola chiave WithEvents può essere usata per creare una variabile oggetto che risponde agli eventi attivati da un oggetto ActiveX, ad esempio l'oggetto Application. NOTA: WithEvents è valido solo in un modulo di classe.
Creare la procedura per l'evento Application specifico. Ad esempio, è possibile creare una routine per l'evento WindowResize, WorkbookOpen o SheetActivate dell'oggetto dichiarato tramite WithEvents.
Creare ed eseguire una routine che avvia il gestore eventi.
L'esempio seguente usa questi passaggi per configurare un gestore eventi globale che visualizza una finestra di messaggio ogni volta che si ridimensiona una finestra della cartella di lavoro (l'evento che genera il gestore eventi).
Creazione e avvio del gestore eventi
Aprire una nuova cartella di lavoro.
Nel menu Strumenti scegliere Macro, quindi fare clic su Visual Basic Editor.
Nota
In Microsoft Office Excel 2007 fare clic su Visual Basic nel gruppo Codice della scheda Sviluppo .
Fare clic su Class Module (Modulo di classe) dal menu Inserisci. Questa operazione inserisce un modulo denominato "<book name> - Class1 (Code)" nel progetto.
Immettere la riga di codice seguente nel modulo Class1 (Code):
VB
PublicWithEvents appevent As Application
La parola chiave WithEvents rende disponibile la variabile appevent nell'elenco a discesa Oggetto nella finestra del modulo Class1 (Code).
Nella finestra del modulo Class1 (Code) fare clic sull'elenco a discesa Oggetto e quindi selezionare appevent nell'elenco.
Nella finestra del modulo Class1 (Code) selezionare l'elenco a discesa Procedure e quindi selezionare WindowResize nell'elenco. Questa operazione aggiunge quanto segue alla finestra del modulo Class1 (Code):
VB
PrivateSub appevent_WindowResize(ByVal Wb As Excel.Workbook, _
ByVal Wn As Excel.Window)
EndSub
Aggiungere codice al foglio del modulo Class1 (Code) in modo che venga visualizzato come segue:
VB
PublicWithEvents appevent As Application
PrivateSub appevent_WindowResize(ByVal Wb As Excel.Workbook, _
ByVal Wn As Excel.Window)
MsgBox "you resized a window"EndSub
Successivamente, è necessario creare un'istanza della classe e quindi impostare l'oggetto appevent dell'istanza di Class1 su Application. Ciò accade perché quando si dichiara una variabile, WithEvents, in fase di progettazione non è associato alcun oggetto. Una variabile WithEvents è esattamente come qualsiasi altra variabile oggetto. È necessario creare un oggetto e assegnare un riferimento all'oggetto alla variabile WithEvents.
Nel menu Inserisci selezionare Modulo per inserire un foglio di modulo di tipo generale nel progetto.
In questo foglio del modulo immettere il codice seguente:
VB
Dim myobject AsNew Class1
Sub Test()
Set myobject.appevent = Application
EndSub
Eseguire la macro di test.
È stato appena impostato il gestore eventi da eseguire ogni volta che si ridimensiona una finestra della cartella di lavoro in Microsoft Excel.
Dal menu File fare clic su Chiudi e torna a Microsoft Excel.
Ridimensionare una finestra della cartella di lavoro. Verrà visualizzata una finestra di messaggio con "hai ridimensionato una finestra".
Come disattivare il gestore eventi
Se si chiude la cartella di lavoro che contiene il progetto precedente, il gestore eventi a livello di applicazione viene disattivato. Per disattivare il gestore eventi a livello di codice, seguire questa procedura:
Avviare Visual Basic Editor.
Nel codice della macro immesso nel passaggio 9 modificare la macro in:
VB
Sub test()
Set myobject.appevent = NothingEndSub
Eseguire di nuovo la macro di test.
Scegliere Chiudi dal menu File e tornare a Microsoft Excel.
Ridimensionare una finestra della cartella di lavoro.