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