Elenco di forme in un foglio
Info
Esempi
Linguaggio
Librerie
Formule
Ultimi Inseriti

 Login

 Password

Una semplice funzione permette di avere una collection con tutte le forme di un determinato tipo presenti in un foglio, anche se ragguppate.
Non è necessario utilizzare la ricorsività per analizzare eventuali raggruppamenti di forme: nel caso di raggruppamenti di secondo livello le forme vengono comunque presenti nel GroupItems del primo livello.
Public Function ScanShape(Sheet As Worksheet, ShapeType As Integer) As Collection
  Dim Res As Collection
  Set Res = New Collection
  
  For Each Shp In Sheet.Shapes
    If (Shp.Type = ShapeType) Then
      Res.Add Shp
    End If
    
    If (Shp.Type = msoGroup) Then
      For Each Shp1 In Shp.GroupItems
        If (Shp1.Type = ShapeType) Then
          Res.Add Shp1
        End If
      Next Shp1
    End If
  Next Shp
  
  Set ScanShape = Res
End Function

Questa parte mostra come sia possibile utilizzare la collection estratta dalla funzione precedente, mostra anche come sia possibile utilizzare la conversione HLS per avere una serie di colori omogenei.
Sub Test_ColoraShape()
  Dim Fa As Worksheet
  Set Fa = ActiveSheet
  Dim Colore As Integer
  
  Dim ElencoShape As New Collection
  Set ElencoShape = ScanShape(Fa, msoFreeform)
  
  Dim Shp As Shape
  Colore = Rnd() * 60
  For Each Shp In ElencoShape
    Shp.Fill.ForeColor.RGB = ColoreHSL(Colore, 50, 70)
    Colore = (Colore + 20) Mod 360
  Next Shp
End Sub


L'esempio completo é scaricabile da questo link: Es253.xlsm (a questo link le info per attivare le macro se risultano bloccate)

Gli esempi contenuti nel sito sono per uso personale, non é consentito l'uso professionale, commerciale o la riproduzione senza autorizzazione.
Per dubbi o domande potete scriverci a domande@macrofacili.it, sulla nostra pagina FB MacroFacili.it o sul gruppo FB Excel, macro e formule.
 

data4idea srls - PIva 01881000937 - info@data4idea.it