Sfruttare gli Eventi per posizionare le istruzioni.   (24/04/03 - modificato 08/09/06)

Davo per scontato che tutti i pellegrini che usano il vba, avessero sufficientemente chiaro che cos'è un evento e come sfruttarlo, ma dalle numerose richieste che mi giungono, ritengo di cercare di fare un pò di chiarezza, se ci riesco.

Intanto il mondo di Excel è diviso in due parti che convivono insieme: il mondo dei fogli di lavoro e il mondo del VBA; in entrambi i mondi esistono "Oggetti" e/o "Insiemi di Oggetti" che possiamo usare, sfruttare, adoperare; sono "Oggetti" la stessa cartella di lavoro (il file .xls), i fogli, le celle, gli "Shapes" (o Forme, compresi quelli presenti nella Casella dei "Moduli"), ed entrando nel mondo del VBA, tutti gli "oggetti" inseribili a partire dalle UserForm, ai "Controlli ActiveX" presenti nella "Casella degli Strumenti", (che troviamo sia nell'editor del VisualBasic sia sul foglio di lavoro), e molti altri "Controlli ActiveX" inseribili a piacere.

In comune molti di questi "Oggetti" hanno delle "Proprietà" ma tutti possiedono degli "EVENTI" :

Cosa è un EVENTO ?:

Per "EVENTO" si intende un "AZIONE" che si può compiere su/con un "Oggetto" per ATTIVARE delle istruzioni associate all'"Oggetto" stesso. L'EVENTO si può verificare per nostra azione diretta (come la pressione su un pulsante (es.: evento Click di un CommandButton_Click)), o in conseguenza di azioni indirette che compiamo noi sul foglio o sulla cartella di lavoro (come la selezione di un foglio di lavoro (es.: evento Worksheet_Activate)). Gli EVENTI non sono uguali per tutti gli Oggetti; ogni Oggetto possiede eventi propri, non necessariamente simili ad altri Oggetti.

L'oggetto Workbook (Cartella di lavoro) per esempio possiede l'evento Open, che altri oggetti non hanno, e che, indipendentemente dalla nostra volontà, si verifica tutte le volte che in Excel apriamo una cartella di lavoro. Potremo per esempio sfruttare questo evento inserendo istruzioni vba, per far apparire un messaggio di saluto, o lanciare una macro, far aprire una UserForm, ecc., tutte le volte che apriremo la cartella (o file .xls che dir si voglia). Come? ma semplicemente inserendo l'istruzione, tramite l'editor di visual basic, nell'apposita (modulo del workbook) pagina. (vedere, su questa sezione, "Editor di Visual Basic", dove ci sono foto che illustrano le spiegazioni.)

L'oggetto WorkSheet (Foglio di lavoro) non possiede l'evento Open, ma l'evento Activate, che NON si verifica quando si apre la cartella di lavoro ma SOLO quando si attiva un Foglio, selezionandolo, oppure l'evento Change che si verifica ogni volta che modifichiamo il contenuto di una cella, o ancora l'evento Calculate, che si verifica tutte le volte che cambia il valore di una cella contenente una formula (quindi il "cambiamento" avviene Non per nostra azione ma come risultato della formula stessa), ed altri eventi.

E' necessario quindi che ogni pellegrino, si documenti sul significato di ogni evento, per capire come sfruttarlo e con quale sequenza si verifica rispetto ad un'altro evento dello stesso Oggetto. In genere, nella finestrina degli Eventi, gli stessi sono elencati in ordine di sequenza. Rifacendoci al WorkSheet, è evidente che l'evento Deactivate (cioè quando il foglio perde lo stato attivo, per es. perchè si seleziona un'altro foglio) si verifica sempre DOPO che si è verificato l'evento Activate, ed infatti nel menù degli eventi appare dopo. Non è questa la sede per elencare tutti gli Eventi di tutti gli Oggetti. La Guida in linea del visual basic è sufficientemente documentata : basta scrivere nella finestra "Indice" della guida, la parola "Events", e nella finestra 3 "Selezionare un argomento" troverete l'elenco di tutti gli eventi, singoli, o raggruppati per oggetti.

Suggerisco quindi, anzichè scrivere a me per domande generiche sugli eventi, di munirsi della necessaria pazienza e di andare a leggersi la guida, che almeno su questi argomenti è chiara e ben fatta. Questo sotto è l'esempio tratto dalla guida, e che riguarda l'evento Change del WorkSheet

Evento Change

Si verifica quando celle del foglio di lavoro sono modificate dall'utente o mediante un collegamento esterno.

Private Sub Worksheet_Change(ByVal Target As Range)

Target   Specifica l'intervallo modificato. Può essere costituito da più di una cella.

Osservazioni

Questo evento non si verifica quando i valori contenuti nelle celle cambiano durante una fase di ricalcolo. Utilizzare l'evento Calcola per intercettare un nuovo calcolo nel foglio.

Esempio

Questo esempio modifica il colore delle celle modificate (le celle Target) su blu.

Private Sub Worksheet_Change(ByVal Target as Range)
    Target.Font.ColorIndex = 5
End Sub

Come vedete, l'esempio è più che chiaro. Basta leggere.....

 

Buon lavoro.


prelevato sul sito http://ennius.interfree.it