Formattare numero in rosso o nero all'interno di una forma, per esempio un ovale

Anonimo
2010-08-24T07:38:10+00:00

Supponiamo che nella cella A1 abbia una formula che mi calcola una percentuale che può essere maggiore o minore di zero.

Nello stesso foglio dove calcolo la percentuale inserisco una forma, per esempio un ovale, ed inserendo nella barra della formula il riferimento alla cella A1, all'interno della forma ovale apparirà il valore della cella A1 e varierà ogni volta che verrà ricalcolata la percentuale.

Ora vorrei che il colore del valore percentuale all'interno della forma ovale diventi rosso quando la percentuale diventa negativa.

E' possibile ottenere il risultato richiesto?

Grazie come sempre per l'aiuto.

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2010-08-26T05:27:56+00:00

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)

http://www.maurogsc.eu/

La risposta è stata utile?

0 commenti Nessun commento

4 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2010-08-26T17:20:01+00:00

    Mauro... ma quante ne sai!

     

    Grazie ancora per l'aiuto

    LOL! Grazie a te per il cortese riscontro e buon lavoro.


    --

    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)

    http://www.maurogsc.eu/

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2010-08-26T13:49:46+00:00

    Mauro... ma quante ne sai!

    Grazie ancora per l'aiuto

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2010-08-25T08:02:28+00:00

    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.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2010-08-24T17:53:15+00:00

    Supponiamo che nella cella A1 abbia una formula che mi calcola una percentuale che può essere maggiore o minore di zero.

    Nello stesso foglio dove calcolo la percentuale inserisco una forma, per esempio un ovale, ed inserendo nella barra della formula il riferimento alla cella A1, all'interno della forma ovale apparirà il valore della cella A1 e varierà ogni volta che verrà ricalcolata la percentuale.

    Ora vorrei che il colore del valore percentuale all'interno della forma ovale diventi rosso quando la percentuale diventa negativa.

    E' possibile ottenere il risultato richiesto?

    Grazie come sempre per l'aiuto.

    Sì, è possibile . Un esempio di come fare è questa macro, che va copia incollata nel modulo di codice del fogliodove vuoi questa cosa:

    Private Sub Worksheet_Change(ByVal Target As Range)

        Dim lng As Long

        If Target.Address = "$A$1" Then

            Me.Shapes(1).Select

            Selection.Characters.Text = Target.Value

            With Selection

                .Characters.Text = Target.Value

                lng = Len(.Characters.Text)

                If Target.Value < 0 Then

                    With .Characters(Start:=1, Length:=lng).Font

                        .ColorIndex = 3

                    End With

                Else

                    With .Characters(Start:=1, Length:=lng).Font

                        .ColorIndex = xlAutomatic

                    End With

                End If

            End With

        End If

        Target.Select

    End Sub

    Se scrivi un valore nella cella A1, il valore verrà copiato nella forma e avrà colore rosso se negativo, nero se positivo. Nell'esempio ho una sola forma sul foglio. Se hai più forme e hai difficoltà a trovare l'indice nell'insieme delle forme che hai sul foglio, chiedi sempre in questo thread e ti diciamo come fare. 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)

    http://www.maurogsc.eu/

    La risposta è stata utile?

    0 commenti Nessun commento