Questa macro consente di selezionare l'intera riga di una tabella in cui è presente la cella selezionata. E sufficiente definire la
tabella o il nome dell'intervallo di celle e la procedura funzionerà senza altre impostazioni; da notare che il formato delle celle non verrà modificato.
Il risultato del codice qui sotto e quello che potete vedere di lato e testare nel file di esempio; nell'esempio è presente sia una tabella che un intervallo di celle. |
Nel codice è interessante vedere 3 cose:
- Il formato è impostato attraverso la formattazione condizionale, in questo modo la formattazione originale, anche se esistono altre regole di formattazione condizionale come nell'esempio, non viene modificata;
- la prima verifica è se la cella è contenuta in una tabella attraverso la scansione della collection ListObject;
- in alternativa viene verificato se la cella fa parte di un intervallo definito, in questo caso attraverso l'analisi dell'oggetto ActiveWorkbook.Names, filtrando solo gli intervalli del foglio attivo.
l'esempio completo é scaricabile da questo link:
Es453.xlsm (a questo link le info per
attivare le macro se risultano bloccate)
Il codice della macro:
Private Sub Worksheet_SelectionChange(
ByVal Target As Range)
Set Fa =
ActiveSheet
Set TabA =
Nothing
'--- cancella le formattazioni precedenti ---
For Each Fc
In Cells.FormatConditions
If (Fc.
Type = xlExpression)
Then
If (Fc.Formula1 = "=111=111")
Then
Fc.Delete
End If
End If
Next Fc
'--- verifica se la selezione è contenuta in una tabella ---
If (Fa.
ListObjects().Count > 0)
Then
For Each T
In Fa.
ListObjects
If (T.Active)
Then
Set TabA = T.DataBodyRange
End If
Next T
End If
'--- verifica se la selezione è contenuta in un intervallo definito ---
If (TabA
Is Nothing)
Then
For Each T
In ActiveWorkbook.Names
tName =
Mid(T.Value, 2,
InStr(T.Value, "!") - 2)
If (Fa.Name = tName)
Then
Set tRange =
Range(T.Value)
If Not (
Application.Intersect(
Target, tRange)
Is Nothing)
Then
Set TabA = tRange
End If
End If
Next T
End If
'--- Imposta il formato ---
If Not (TabA
Is Nothing)
Then
Set Riga = Fa.
Range(Fa.
Cells(
Target.Row, TabA.Column), Fa.
Cells(
Target.Row, TabA.Column + TabA.
Columns.Count - 1))
Riga.FormatConditions.Add
Type:=xlExpression, Formula1:="=111=111"
Nr = Riga.FormatConditions.Count
Riga.FormatConditions(Nr).SetFirstPriority
Riga.FormatConditions(1).Interior.Color = RGB(255, 255, 153)
Riga.FormatConditions(1).StopIfTrue = False
End If
End Sub
Gli esempi contenuti nel sito sono per uso personale, non é consentito l'uso professionale, commerciale o la riproduzione senza autorizzazione.