Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Grazie Mauro,
ho aperto un nuovo file ho incollato il codice in un modulo, ho disegnato un ovale con le forme ed ho inserito a mano nella cella A1 il valore 5%.
La macro parte ma si ferma subito su Me.Shape(1).Select con il seguente messaggio di errore di compilazione: "Impossibile trovare il metodo o il membro dei dati".
Poi come hai bene immaginato il file è composto da più fogli che al loro interno hanno, supponiamo, le celle a1 a3 a5 che contengono le percentuali e ci sono i relativi ovali collegati alle celle che hanno la stessa esigenza di diventare rossi o neri.
Inoltre vedendo il codice ti chiedo se volessi che il font sia grassetto per entrambi i casi, positivo o negativo, è una grossa modifica?
Grazie ancora.
Il codice va copia/incollato nel modulo di codice del foglio, non in un modulo standard. Comunque vediamo di fare alcuni ragionamenti. Mi sembra di capire che tu abbia n forme su ciscun foglio. Partiamo da Foglio1. La prima cosa è sapere quale nome è assegnato a ciscuna forma. Metti questa macro nel modulo di codice di Foglio1 e falla girare:
Public Sub mIndici()
Dim shp As Shape
For Each shp In Me.Shapes
With shp
.Select
.TextFrame2.TextRange.Characters.Text = .ID
End With
Next
Set shp = Nothing
End Sub
Adesso in ogni forma vedi il nome assegnato al momento della sua creazione. Possiamo eliminare il codice(o semplicemente commentarlo se ci servisse in seguito), avendo cura di copiarlonei moduli di codice di eventuali altri fogli su cui fare la stessa cosa.
Mettiamo che cella A1 sia collegata alla forma Oval 1, cella A2 ad Oval 2 e cella A3 ad Oval 3(Oval n sono i nomi assegnati di default da Excel 2003 alle forme nell'esempio che sto facendo parallelamente a questa risposta). Sempre nel modulo di codice del Foglio1, copia/incolliamo questo:
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case Is = "$A$1"
Me.Shapes("Oval 1").Select
With Selection
.Characters.Text = Target.Value
With .Characters(Start:=1, Length:=Len(.Characters.Text)).Font
.Name = "Arial"
.FontStyle = "Bold"
.Size = 12
.Strikethrough = False
If Target.Value > 0 Then
.ColorIndex = xlAutomatic
Else
.ColorIndex = 3
End If
End With
End With
Case Is = "$A$2"
Me.Shapes("Oval 2").Select
With Selection
.Characters.Text = Target.Value
With .Characters(Start:=1, Length:=Len(.Characters.Text)).Font
.Name = "Arial"
.FontStyle = "Bold"
.Size = 12
.Strikethrough = False
If Target.Value > 0 Then
.ColorIndex = xlAutomatic
Else
.ColorIndex = 3
End If
End With
End With
Case Is = "$A$3"
Me.Shapes("Oval 3").Select
With Selection
.Characters.Text = Target.Value
With .Characters(Start:=1, Length:=Len(.Characters.Text)).Font
.Name = "Arial"
.FontStyle = "Bold"
.Size = 12
.Strikethrough = False
If Target.Value > 0 Then
.ColorIndex = xlAutomatic
Else
.ColorIndex = 3
End If
End With
End With
Case Else
Exit Sub
End Select
End Sub
La stessa routine ottimizzata dell'evento Change del foglio la posto qui sotto. Forse è più difficile da capire. Vedi tu, entrambe fanno la stessa cosa:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lng As Long
Dim rng As Range
Set rng = Me.Range("A1:A3")
lng = Target.Row
If Not Intersect(Target, rng) Is Nothing Then
Me.Shapes("Oval " & lng).Select
With Selection
.Characters.Text = Target.Value
With .Characters(Start:=1, Length:=Len(.Characters.Text)).Font
.Name = "Arial"
.FontStyle = "Bold"
.Size = 12
.Strikethrough = False
If Target.Value > 0 Then
.ColorIndex = xlAutomatic
Else
.ColorIndex = 3
End If
End With
End With
End If
Set rng = Nothing
End Sub
Per eventuali modifiche a grassetto, font, colore, ecc, credo che si intuisca cosa modificare nel codice. Prova prima a ricostruire il mio esempio, poi a utilizzare il codice nel tuo file. Resta sempre in questo thread per ulteriori problemi/domande, siamo(quasi) sempre qui. Grazie come sempre per l'attenzione e scusami per il ritardo nelal risposta ma ho un po' di impegni.
NOTA. Il tutto è stato testato esclusivamente in Excel 2003, la versione con cui lavora chi ha fatto la richiesta.
--
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)