Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao a tutti!
Da quando sono passato a Excel 2007 ho serie difficoltà a gestire gli oggetti grafici.
In questa versione sono aumetnate considerevolmente le caratteristiche degli oggetti grafici (rettangoli, cerchi...) ma con essi la difficoltà (mia) di gestirli via codice.
In passato ovviavo alla mia scarsa conoscenza del codice per la gestione degli oggetti, attingendo a piene mani dal Registratore Macro. Lo avviavo e facevo tutte le operazioni di modifica necessarie alla mia forma. Poi copiavo (adattandolo) il codice registrato nella mia macro...bei momenti!
Ora il Registratore Macro non registra alcuna riga di codice quando lavoro sulle shapes e mi tocca provare per ore sino ad ottenere la forma che desideravo...il più delle volte senza riuscirci.
Un conto è creare un rettangolo dai bordi arrotondati, un altro è creare un rettangolo con lo stile "Effetto marcato - colore 2" definito negli Stili forma (Ribbon Formato).
A questo punto ho cercato avidamente suggerimenti nell'help in linea e nel web con scarsi risultati... :-(
Chi i sa indicare dove cercare un po' di letteratura su questo tema?
Purtroppo è un bug noto del vb di Excel2007 quello di non registrare quanto vorresti. Vedi qui se ti aiuta. Apri un nuovo file. Fai girare questa macro:
Public Sub m()
Dim lng As Long
Dim lTop As Long
lTop = 5
For lng = 1 To 42
ActiveSheet.Shapes.AddShape( _
msoShapeRoundedRectangle, 20, lTop, 105, 60 _
).Select
Selection.ShapeRange.ShapeStyle = lng
Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "msoShapeStylePreset" & lng
lTop = lTop + 65
Next
End Sub
Visto nel foglio? Bello vero? ;-) Prova di seguirmi nel ragionamento. Il segreto è tutto qui:
Selection.ShapeRange.ShapeStyle = lng
dove ShapeStyle si aspetta una costante msoShapeStylePresetn, dove n è un valore numerico. Il risultato che hai a video dovrebbe chiarire la cosa, in quanto all0interno di ciascuna Shape ho messo la relativa costante. Se nella guida del vba di Excel vai a questa voce: Shapes.AddShape, metodo e poi selezioni: MsoAutoShapeType, trovi invece le costanti da utilizzare qui:
ActiveSheet.Shapes.AddShape( _
msoShapeRoundedRectangle, 20, lTop, 105, 60 _
).Select
al posto di: msoShapeRoundedRectangle che, nell'esempio, crea un rettangolo arrotondato. Intanto prova e poi lo sai, siamo sempre(quasi sempre qui). Grazie per l'attenzione.
--
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)