A volte capita di avere a che fare con molti oggetti su un oglio di Excel quali linee, rettangoli, cerchi, frecce e volerli manipolare.
Il metodo semplice è di assegnare ad ogni oggetto un nome e successivamente manipolarlo in VBA attraverso le proprietà dell’oggetto.
In VBA per “indirizzare” un oggetto di un foglio di lavoro si usa il costrutto:
ActiveSheet.Shapes.Range(Array("NOME_OGGETTO")).Select
With Selection.ShapeRange.Fill
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorAccent2
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0
.Transparency = 0
.Solid
End With
In questo caso si cambia il colore dell’oggetto che ha per nome “NOME_OGGETTO“.
Questo procedimento funziona bene se si conoscono i nomi degli oggetti sul foglio di lavoro.
Ciò non è possibile in modo banale e sopratutto non è semplice esportare in un foglio excel i nomi per utilizzarli ad esempio nella macro che ne deve cambiare il colore. Ciò rende il tutto molto complicato perchè la macro dovrebbe conoscere tutti i nomi di tutti gli oggiettiprsenti sul foglio di lavoro senza leggerne i nomi..
Questa semplice macro crea un foglio di lavoro e inserisce la lista di tutti i nomi di tutti gli oggetti presenti in un foglio di lavoro “sorgente”.
Sub ListWorkSheetNamesNewWs()
Dim xWs As Worksheet
Dim Current As Worksheet
Dim i As Long
On Error Resume Next
Application.DisplayAlerts = False
xTitleId = "OFFICE-GURU List NAMES"
Application.Sheets(xTitleId).Delete
Set Current = ActiveSheet
Application.Sheets.Add Application.Sheets(1)
Set xWs = Application.ActiveSheet
xWs.Name = xTitleId
Current.Activate
i = 1
For i = 1 To ActiveSheet.Shapes.Count
xWs.Range("A1").Offset(i, 0).Value = ActiveSheet.Shapes.Range(Array(i)).Name
Next i
Application.DisplayAlerts = True
End Sub
Per usarla è molto semplice:
- Importate la macro nel vostro ambiente excel
- andate sul foglio di lavoro per cui volete creare la lista degli oggetti
- premete ALT F11
- Eseguite la macro
un nuovo foglio di lavoro viene creato con l’elenco dei nomi degli oggetti presenti sul foglio di lavoro su cui si è eseguita la macro alla colonna A.
Per concludere l’articolo alcuni consigli di manuali sulla manipolazione degli oggetti in Excel:
Attenzione solo che se si ragguppano gli oggetti attraverso il comando “Raggruppa” o “Group” in inglese, la macro riporterà il nome del “gruppo” senza aprirlo nelle sue parti costituenti (il che non avrebbe senso perchè l’utente ha appunto creato un gruppo e quindi ci si aspetta che lo voglia manipolare come gruppo appunto)
Scarica File di Esempio: List Objects in Excel
La macro è stata adattata da una simile del sito ExtendOffice