maurogsc.eu
mauro gamberini


home ==> Excel: articoli ==> Worksheet - Evento SelectionChange del foglio

Worksheet - Evento SelectionChange del foglio

Situazione.
Vediamo nell'articolo di analizzare  l'evento SelectionChange del foglio.

Nota.
Il codice dell’esempio, scaricabile a questo link, è commentato e nella cartella in formato .zip è contenuto un file di Excel i formato .xls. Il codice ed il file sono forniti *così come sono* e l’autore declina ogni responsabilità su eventuali problemi causati dal codice o dal file se usati impropriamente. Utilizzate gli esempi forniti o files di test per le vostre prove. Codice e file sono stati testati con(e quindi validi per) Excel 2000/Xp(2002)/2003/2007/2010.

Cos'è l'evento SelectionChange.
Un evento è una routine particolare che viene eseguita in risposta a qualcosa fatto dall'utente o da altro codice. Nel caso specifico, l'evento SelectionChange di un foglio si verifica(viene scatenato) ogni volta che via mouse, via tastiera o via codice modifichiamo la selezione sul foglio, quindi passiamo, ad esempio, dalla cella A1 alla cella B10 o selezioniamo l'intervallo(Range) D2:H15. Il codice che gestisce l'evento è visualizzabile nel modulo di codice di ciascun foglio. Nel modulo di codice del Foglio1, ad esempio, in alto a sx nella ComboBox dove troviamo: (generale), selezioniamo: Worksheet. Di default verrà aggiunto il codice per gestire l'evento SelectionChange. Aggiungiamo un semplice codice in modo che il nostro evento abbia questo aspetto;

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    With Target
        MsgBox .Address
    End With
End Sub

Torniamo in *Excel lato celle* con ALT+F11 e selezioniamo una cella del Foglio1. La MsgBox ci mostrerà il riferimento alla cella selezionata. Modifichiamo la selezione e/o proviamo a selezionare più celle, gruppi di celle, colonne, righe e vediamo come risponde l'evento SelelectionChange e cosa ci restituisce nella MsgBox.

Utilizziamolo da codice
L'evento SelectionChange può essere utilizzato anche da codice. Ad esempio quando modifichiamo la cella selezionata tramite il codice di una macro, l'evento risponderà . Un esempio forse vale, come sempre, più di 1000 parole. Modulo di codice del Foglio1 con il codice che abbiamo già visto:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    With Target
        MsgBox .Address
    End With
End Sub

E questo codice invece in un modulo standard:

Public Sub m_1()
    
    'dichiaro le variabili
    Dim wk As Workbook
    Dim sh As Worksheet
    
    'metto un riferimento al Workbook
    'che contiene il modulo di codice
    Set wk = ThisWorkbook
    
    With wk
        'metto un riferimento al Foglio1
        'di questo Workbook
        Set sh = .Worksheets("Foglio1")
    End With
    
    With sh
        'seleziono il Foglio1
        .Select
        'seleleziono la cella sotto
        'alla cella attiva, richiamando
        'così l'evento SelectionChange
        'del Foglio1
        ActiveCell.Offset(1, 0).Select
        'codice commentato per la
        'selezione di un Range di celle
        'sul Foglio1(se utilizzato,
        'commentare l'altra selezione)
        '.Range("A1:C10").Select
    End With
    
    'Set a Nothing delle variabili oggetto
    Set sh = Nothing
    Set wk = Nothing
    
End Sub

Il parametro Target.
L'evento SelectionChange ha come parametro Target che fa riferimento all'oggetto di tipo Range selezionato. Oggetto che può essere una cella o più celle, una riga o più righe, una colonna o più colonne, e del quale è possibile utilizzare tutti i metodi e le proprietà specifiche. Il codice qui sotto, che nell'esempio scaricabile trovate nel modulo di codice del Foglio2, colora di giallo lo sfondo delle vostre selezioni sul Foglio2:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    With Me
        'elimino il colore di riempimento
        'a tutte le celle
        .Cells.Interior.Color = xlNone
    End With
    With Target
        'metto come colore di riempimento
        'il giallo alla cella selezionata
        .Interior.ColorIndex = 6
    End With
End Sub

Ricordo che esiste l'evento SheetSelectionChange relativo al Workbook, per il quale trovate alcune cosiderazioni qui: WorkBook - Evento SheetSelectionChange.

Per ulteriori informazioni su Microsoft Excel ed il suo Visual Basic, utilizzate questo forum:
http://social.answers.microsoft.com/Forums/it-IT/officeexcelit/threads


Ultimo aggiornamento di questa pagina: 16/11/2009 - mauro gamberini