Come modificare il testo presente nelle caselle di testo di un grafico

Diego ha diversi grafici in una cartella di lavoro. Ogni grafico contiene due caselle di testo con la data dei dati correnti e la data in cui il grafico è stato aggiornato. Diego vorrebbe modificare il testo in queste caselle di testo del grafico con una macro ma non conosce la tecnica corretta per eseguire l’operazione.

Questo, ovviamente, può essere fatto con una macro, ma dovresti capire che esiste un modo per farlo senza una macro. Se lo desideri, puoi collegare ciò che viene mostrato in una casella di testo al contenuto di una cella. Ciò significa che potresti rendere ciascuna delle tue caselle di testo “dinamica” in modo che tutto ciò che devi fare sia cambiare ciò che si trova nella cella associata. Quella cella potrebbe contenere un valore di testo, un valore numerico, una data o una formula: non ha molta importanza.

Ecco come ottenere questa tecnica: seleziona la casella di testo che desideri associare a una cella facendo clic su di essa una sola volta. Le “maniglie” dovrebbero apparire all’esterno della casella di testo. Quindi, nella barra della formula, inserisci un riferimento di cella. Puoi farlo inserendolo in questo modo:

 

=$C$15

 

Questo lega il contenuto della casella di testo a qualunque cosa si trovi nella cella C15. Puoi anche, se preferisci, eliminare tutto ciò che si trova nella barra della formula e, con la barra della formula attiva, fare clic sulla cella che desideri collegare. L’indirizzo della cella dovrebbe apparire nella barra della formula. Premi Invio e l’attività è completata.

Ora digita qualcosa nella cella associata. Qualunque cosa digiti dovrebbe apparire immediatamente nella casella di testo.

Invece, prima di poter fornire alcune potenziali risposte relative alle macro, avrai bisogno di un po’ di informazioni di base sul modello a oggetti di Excel, accessibile tramite VBA.

Esistono due tipi di grafici che possono essere contenuti in una cartella di lavoro: un foglio grafico e un grafico incorporato. I fogli grafici sono rappresentati da un oggetto Chart e appartengono alla collezione Charts. I grafici incorporati, invece, sono rappresentati da un oggetto Chart che appartiene alla raccolta ChartObjects che, a sua volta, appartiene a un oggetto Worksheet.

Se posizioni una casella di testo su un foglio grafico, è possibile accedervi nel modo seguente:

 

Sub FindTextBoxes1()
    Dim c As Chart
    Dim s As Shape
    Dim sMsg As String
    Dim sName As String
    For Each c In ActiveWorkbook.Charts
        For Each s In c.Shapes
            If s.Type = msoTextBox Then
                sMsg = s.TextFrame2.TextRange.Text
                sName = s.Name
                MsgBox "Testo: " & sMsg, vbOKOnly, sName
            End If
        Next s
    Next c
End Sub

 

 

Questa macro scorre ogni foglio grafico e poi ogni casella di testo su ogni foglio grafico. Tutto ciò che è contenuto in ciascuna casella di testo viene quindi visualizzato in una finestra di messaggio. Se vuoi cambiare il contenuto delle caselle di testo, tutto ciò che devi fare è impostare la proprietà Text dell’oggetto TextRange.

Le caselle di testo sui grafici incorporati sono una storia diversa. Perché? Perché è possibile che la casella di testo non faccia realmente parte del grafico, ma faccia parte del foglio di lavoro. In altre parole, il “genitore” della casella di testo potrebbe essere il grafico incorporato oppure il foglio di lavoro.

Un buon modo per scoprire se la casella di testo fa parte del grafico incorporato è creare una macro simile a quella appena presentata. Questa, tuttavia, può scorrere ogni grafico incorporato in ciascun foglio di lavoro e trovare ogni forma (casella di testo) all’interno di quel grafico.

 

Sub FindTextBoxes2()
    Dim w As Worksheet
    Dim c As ChartObject
    Dim s As Shape
    Dim sMsg As String
    Dim sName As String
    For Each w In ActiveWorkbook.Worksheets
        For Each c In w.ChartObjects
            For Each s In c.Chart.Shapes
                If s.Type = msoTextBox Then
                    sMsg = "Questa casella di testo è figlia del "
                    sMsg = sMsg & "grafico incorporato" & vbCrLf
                    sMsg = sMsg & "Testo: " & s.TextFrame2.TextRange.Text
                    sName = s.Name
                    MsgBox sMsg, vbOKOnly, sName
                End If
            Next s
        Next c
        For Each s In w.Shapes
            If s.Type = msoTextBox Then
                sMsg = "Questa casella di testo è figlia del "
                sMsg = sMsg & "foglio di lavoro" & vbCrLf
                sMsg = sMsg & "Text: " & s.TextFrame2.TextRange.Text
                sName = s.Name
                MsgBox sMsg, vbOKOnly, sName
            End If
        Next s
    Next w
End Sub

 

 

Quando esegui la macro, vedrai una finestra di messaggio per ogni casella di testo che in realtà è figlia dei grafici incorporati. Verrà quindi visualizzata una finestra di messaggio per tutte le caselle di testo figlie del foglio di lavoro. Come nella macro precedente, anche questa controlla che l’oggetto Shape sia realmente una casella di testo prima di visualizzare qualsiasi informazione su di essa. Ciò è particolarmente importante quando si esamina ogni forma nel foglio di lavoro, poiché anche tutti i grafici incorporati nel foglio sono considerati parte della raccolta Shapes.

Come in precedenza, per modificare il testo contenuto in una casella di testo è sufficiente modificare la proprietà Text dell’oggetto TextRange.

 

 

Tags: , , , , , , , , , , , , , , , , ,

Ti è stato utile?