maurogsc.eu
|
![]() |
home ==> Excel: articoli ==> Workbook - Evento SheetSelectionChange di ThisWorkbook
Workbook - Evento SheetSelectionChange di
ThisWorkbookSituazione.
Vediamo nell'articolo di analizzare l'evento SheetSelectionChange di
ThisWorkbook.
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 SheetSelectionChange.
Un evento è una routine particolare che viene eseguita in risposta a
qualcosa fatto dall'utente o da altro codice. Nel caso specifico, l'evento
SheetSelectionChange di ThisWorkbook si verifica(viene scatenato) ogni volta che via
mouse, via tastiera o via codice modifichiamo la selezione su di un foglio del
Workbook(cartella/file) a cui ThisWorkbook fa riferimento. Il codice che gestisce l'evento è visualizzabile nel modulo di codice di
ThisWorkbook. Nel modulo di codice di ThisWorkbook, ad esempio, in alto a sx nella
ComboBox dove troviamo: (generale), selezioniamo: Workbook e nella ComboBox di
dx selezioniamo: SheetSelectionChange. Verrà
così aggiunto il codice per gestire l'evento SheetSelectionChange. Aggiungiamo un semplice
codice in modo che il nostro evento abbia questo aspetto;
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
MsgBox "Foglio: " & Sh.Name & vbNewLine _
& "Range: " & Target.Address
End Sub
Torniamo in *Excel lato celle* con ALT+F11 e selezioniamo una cella di un foglio qualsiasi. La MsgBox ci mostrerà il riferimento al foglio e alla cella selezionata. Cambiamo foglio e selezione e/o proviamo a selezionare più celle, gruppi di celle, colonne, righe e vediamo come risponde l'evento SheetSelelectionChange e cosa ci restituisce nella MsgBox.
Utilizziamolo da codice
L'evento SheetSelectionChange 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
di ThisWorkbook con il codice che abbiamo già visto:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
MsgBox "Foglio: " & Sh.Name & vbNewLine _
& "Range: " & Target.Address
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
I parametri Sh e Target.
L'evento SheetSelectionChange ha due parametri,
Sh e
Target. Il primo, Sh, ha un riferimento al foglio sul quale si sta modificando
la selezione. Il secondo, Target, ha un riferimento all'oggetto di tipo Range selezionato.
Sia Sh che Target espongono e mettono a disposizione i metodi e le proprietà
degli oggetti a cui fanno riferimento. Il codice qui sotto, che nell'esempio
scaricabile è commentato(non attivo), colora di giallo lo sfondo delle vostre selezioni
fatte sui fogli del Workbook:
Private Sub Workbook_SheetSelectionChange(ByVal sh As Object, ByVal Target As Range)
With sh
'elimino il colore di sfondo da
'tutte le celle del foglio a
'cui fa riferimento Sh
.Cells.Interior.ColorIndex = xlNone
End With
With Target
'coloro di giallo lo sfondo
'del Range a cui fa riferimento
'Target
.Cells.Interior.ColorIndex = 6
End With
End Sub
Si potrebbe sfruttare il parametro Sh per centralizzare, in modo selettivo, l'evento SelectionChange di tutti i fogli. Riprendendo quanto fatto nel codice precedente, vogliamo che sul Foglio2 non si colori di giallo lo sfondo, mentre vogliamo sia fatto per i Fogli1 e Foglio3(anche questo codice è commentato nel file d'esempio scaribabile).
Private Sub Workbook_SheetSelectionChange(ByVal sh As Object, ByVal Target As Range)
With sh
'controllo che il riferimento
'di Sh non sia il Foglio2
If .Name <> "Foglio2" Then
'elimino il colore di sfondo
'dalle celle del foglio
.Cells.Interior.ColorIndex = xlNone
'metto il colore di sfondo giallo
'al Range a cui fa riferimento Target
Target.Cells.Interior.ColorIndex = 6
End If
End With
End Sub
Ricordo che esiste l'evento SelectionChange relativo al foglio, per il quale trovate alcune cosiderazioni qui: Worksheet - Evento SelectionChange.
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: 17/11/2009 - mauro gamberini