Ciao Guido,
On 10/02/2017 7.45, Guido Cei wrote:
> Grazie mille!!!
>
> sto provando ed è esattamente quello che volevo.
Bene! Ti ringeazio per il cortese riscontro.
> se posso chiedere, che differenza c'è di approccio tra la
> prima e la seconda soluzione che hai postato? giusto per
> provare a capire meglio e non prendere solo la tua soluzione
> come un semplice copia-incolla
Ottima filosofia! In questo modo si impara!
Molto spesso si può rendere il codice più efficiente, sostituendo più
istanze di un singolo oggetto con una struttura del tipo With / End With
A questo proposito, considera il seguente codice banale per formatare
una cella:
'=========>>
Public Sub Tester()
ActiveSheet.Range("A2").Font.Name = "Arial Black"
ActiveSheet.Range("A2").Font.Size = 14
ActiveSheet.Range("A2").Font.Strikethrough = True
ActiveSheet.Range("A2").Font.Superscript = False
ActiveSheet.Range("A2").Font.Subscript = False
ActiveSheet.Range("A2").Font.OutlineFont = False
ActiveSheet.Range("A2").Font.Shadow = True
ActiveSheet.Range("A2").Font.Underline = xlUnderlineStyleSingle
ActiveSheet.Range("A2").Font.ThemeColor = xlThemeColorAccent4
ActiveSheet.Range("A2").Font.TintAndShade = 0
ActiveSheet.Range("A2").Font.ThemeFont = xlThemeFontNone
End Sub
'<<=========
Con questo codice, per ogni riga di codice, VBA deve ri-interpretare
l'oggetto
ActiveSheet.Range("A2")
Potremmo rendere il codice molto più efficiente, meno verboso e,
inoltre, più comprensibile, con l'uso della struttura With / End With:
'=========>>
Public Sub Tester()
With ActiveSheet.Range("A2")
.Font.Name = "Arial Black"
.Font.Size = 14
.Font.Strikethrough = True
.Font.Superscript = False
.Font.Subscript = False
.Font.OutlineFont = False
.Font.Shadow = True
.Font.Underline = xlUnderlineStyleSingle
.Font.ThemeColor = xlThemeColorAccent4
.Font.TintAndShade = 0
.Font.ThemeFont = xlThemeFontNone
End With
End Sub
'<<=========
Torniamo ora alla prima versione del codice, che avevo postato nella mia
prima risposta, ossia
>>> '=========>>
>>> Option Explicit
>>>
>>> Private Sub Worksheet_SelectionChange(ByVal Target As Range)
>>> Me.Cells.Interior.ColorIndex = xlNone
>>> With Target
>>> .EntireRow.Cells(1).Interior.ColorIndex = 36
>>> End With
>>> End Sub
>>> '<<=========
Qui, trattandosi di una sola istanza dell'oggetto di interesse, ovvero
l'oggeto Target, non vi è alcun vantaggio né la necessità per l'uso
della struttura With/End With e di conseguenza, sarebbe preferibile
eliminarla. Pertanto, ho suggerito:
>> Oppure, più semplicemente:
>>
>> '=========>>
>> Option Explicit
>>
>> Private Sub Worksheet_SelectionChange(ByVal Target As Range)
>> Me.Cells.Interior.ColorIndex = xlNone
>> Target.EntireRow.Cells(1).Interior.ColorIndex = 36
>> End Sub
>> '<<=========
Nel caso che la mia spiegazione fosse poco chiara, chiedi pure ulteriore
delucidazioni.
===
Regards,
Norman