Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Mi mancherebbe poi il controllo se lo stile esiste già ! mi potresti aiutare ??
Vediamo un po', lunghetto. Questa macro crea ogni volta uno style assegnandogli un nome diverso, tipo Style48, Style49, ecc.:
Public Sub m()
Dim wk As Workbook
Dim sh As Worksheet
Dim lStyles As Long
Set wk = ThisWorkbook
Set sh = wk.Worksheets("Foglio1")
With wk
lStyles = .Styles.Count + 1
.Styles.Add ("Style" & lStyles)
With .Styles("Style" & lStyles)
.IncludeNumber = True
.IncludeFont = True
.IncludeAlignment = True
.IncludeBorder = True
.IncludePatterns = True
.IncludeProtection = True
End With
With .Styles("Style" & lStyles).Font
.Name = "Calibri"
.Size = 11
.Bold = True
.Italic = False
.Underline = xlUnderlineStyleNone
.Strikethrough = False
.ThemeColor = 1
.TintAndShade = 0
.ThemeFont = xlThemeFontMinor
End With
With .Styles("Style" & lStyles).Interior
.Pattern = xlSolid
.PatternColorIndex = 0
.ThemeColor = xlThemeColorAccent3
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End With
Set sh = Nothing
Set wk = Nothing
End Sub
Volendo, poso passare alla macro dei parametri di formattazione relativi ad una cella formattata in precedenza senza Style:
Public Sub m(ByVal rng As Range)
Dim wk As Workbook
Dim lStyles As Long
Set wk = ThisWorkbook
With wk
lStyles = .Styles.Count + 1
.Styles.Add ("Style" & lStyles)
With .Styles("Style" & lStyles)
.IncludeNumber = True
.IncludeFont = True
.IncludeAlignment = True
.IncludeBorder = True
.IncludePatterns = True
.IncludeProtection = True
End With
With .Styles("Style" & lStyles).Font
.Name = rng.Font.Name
.Size = rng.Font.Size
.Bold = rng.Font.Bold
.Italic = rng.Font.Italic
.Underline = rng.Font.Underline
.Strikethrough = rng.Font.Strikethrough
.TintAndShade = rng.Font.TintAndShade
End With
With .Styles("Style" & lStyles).Interior
.Pattern = rng.Interior.Pattern
.PatternColorIndex = rng.Interior.PatternColorIndex
.ColorIndex = rng.Interior.ColorIndex
.TintAndShade = rng.Interior.TintAndShade
.PatternTintAndShade = rng.Interior.PatternTintAndShade
End With
End With
Set wk = Nothing
End Sub
Con la macro qui sotto richiamiamo m() e le passiamo appunto come parametro la cella A1 del Foglio1, creando uno Style in base alla formattazione di A1:
Public Sub m_1()
Dim sh As Worksheet
Dim rng As Range
Set sh = ThisWorkbook.Worksheets("Foglio1")
With sh
Set rng = .Range("A1")
Call m(rng)
End With
Set sh = Nothing
Set rng = Nothing
End Sub
Possaimo ovviamente creare più Styles in base alle formattazioni di un gruppo di celle, qui A1:A5 del Foglio1:
Public Sub m_1()
Dim sh As Worksheet
Dim rng As Range
Dim c As Range
Set sh = ThisWorkbook.Worksheets("Foglio1")
With sh
Set rng = .Range("A1:A5")
For Each c In rng
Call m(c)
Next
End With
Set c = Nothing
Set sh = Nothing
Set rng = Nothing
End Sub
Più che altro devi sperimentare, anche perchè ho notato che alcune proprietà degli Styles non corrispondono alle proprietà delle celle. Tu mi chiedevi come fare per sapere se un nome è già presente. Io aggiro il problema con un numero progressivo(credo che nel codice si veda). Puoi comunque ciclare l'insieme Styles e controllare la presenza o meno di un nome: esempio:
Public Sub m_2()
Dim oStyle As Style
For Each oStyle In ThisWorkbook.Styles
MsgBox oStyle.Name
Next
Set oStyle = Nothing
End Sub
Non credo sia difficile sostituire alla MsgBox la gestione dei nomi. Per assegnare invece uno Style ad una cella(qui la cella attiva):
Public Sub m_3()
ActiveCell.Style = "NomeDelloStyle"
End Sub
--
La soluzione, il codice ed i files sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dalla soluzione proposta se usata impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare la soluzione in files importanti.
--
Mauro Gamberini - Microsoft© MVP(Excel)