Leggere in inglese

Condividi tramite


Creare gestori eventi a livello di applicazione in Excel

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

  1. Aprire una nuova cartella di lavoro.

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

  3. Fare clic su Class Module (Modulo di classe) dal menu Inserisci. Questa operazione inserisce un modulo denominato "<book name> - Class1 (Code)" nel progetto.

  4. Immettere la riga di codice seguente nel modulo Class1 (Code):

    VB
    Public WithEvents appevent As Application
    

    La parola chiave WithEvents rende disponibile la variabile appevent nell'elenco a discesa Oggetto nella finestra del modulo Class1 (Code).

  5. Nella finestra del modulo Class1 (Code) fare clic sull'elenco a discesa Oggetto e quindi selezionare appevent nell'elenco.

  6. 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
       Private Sub appevent_WindowResize(ByVal Wb As Excel.Workbook, _
           ByVal Wn As Excel.Window)
    
       End Sub
    
  7. Aggiungere codice al foglio del modulo Class1 (Code) in modo che venga visualizzato come segue:

    VB
           Public WithEvents appevent As Application
    
    Private Sub appevent_WindowResize(ByVal Wb As Excel.Workbook, _
               ByVal Wn As Excel.Window)
    
    MsgBox "you resized a window"
    
    End Sub
    

    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.

  8. Nel menu Inserisci selezionare Modulo per inserire un foglio di modulo di tipo generale nel progetto.

  9. In questo foglio del modulo immettere il codice seguente:

    VB
          Dim myobject As New Class1
    
          Sub Test()
              Set myobject.appevent = Application
          End Sub
    
  10. 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.

  11. Dal menu File fare clic su Chiudi e torna a Microsoft Excel.

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

  1. Avviare Visual Basic Editor.

  2. Nel codice della macro immesso nel passaggio 9 modificare la macro in:

    VB
          Sub test()
              Set myobject.appevent = Nothing
          End Sub
    
  3. Eseguire di nuovo la macro di test.

  4. Scegliere Chiudi dal menu File e tornare a Microsoft Excel.

  5. Ridimensionare una finestra della cartella di lavoro.

    La finestra di messaggio non verrà visualizzata.