Modifica del testo nelle caselle di testo su un grafico (Microsoft Excel)
Don ha più grafici in una cartella di lavoro. Ogni grafico contiene due caselle di testo con le date dei dati correnti e le date in cui il grafico è stato aggiornato. Don vorrebbe cambiare tutto 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 c’è un modo per farlo senza una macro. Puoi, se lo desideri, legare ciò che viene mostrato in una casella di testo al contenuto di una cella. Ciò significa che puoi rendere “dinamica” ciascuna delle tue caselle di testo in modo che tutto ciò che devi fare è cambiare ciò che è nella cella associata. Quella cella potrebbe contenere un valore di testo, un valore numerico, una data o una formula, non importa.
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 familiari dovrebbero apparire intorno all’esterno della casella di testo. Quindi, nella barra della formula, inserisci un riferimento di cella. Puoi farlo inserendolo in questo modo:
=$C$15
Ciò lega il contenuto della casella di testo a tutto ciò che è nella cella C15. Potresti anche, se preferisci, eliminare tutto ciò che è 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 tu digiti dovrebbe apparire immediatamente nella casella di testo.
Prima di poter fornire alcune potenziali risposte relative alle macro, avrai bisogno di un po ‘di background sul modello a oggetti di Excel, che è 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 raccolta Charts. I grafici incorporati, d’altra parte, sono rappresentati da un oggetto Chart che appartiene alla raccolta ChartObjects che, a sua volta, appartiene a un oggetto del foglio di lavoro.
Se si posiziona una casella di testo su un foglio grafico effettivo, è 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 "Text: " & sMsg, vbOKOnly, sName End If Next s Next c End Sub
Questa macro passa attraverso ogni foglio grafico e quindi attraverso ogni casella di testo in ogni foglio grafico. Qualunque cosa si trovi in ciascuna casella di testo viene quindi visualizzata in una finestra di messaggio. Se vuoi cambiare ciò che è contenuto in una finestra di messaggio, 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 effettivamente parte del grafico, ma faccia parte del foglio di lavoro. In altre parole, il “genitore” della casella di testo potrebbe essere il grafico incorporato o 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. Questo, tuttavia, può scorrere ogni grafico incorporato in ogni 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 = "This text box is a child of the " sMsg = sMsg & "embedded chart" & vbCrLf sMsg = sMsg & "Text: " & 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 = "This text box is a child of the " sMsg = sMsg & "worksheet" & 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à un figlio dei grafici incorporati. Quindi, vedrai una finestra di messaggio per tutte le caselle di testo che sono figlio del foglio di lavoro. Come nella macro precedente, questa controlla per assicurarsi che l’oggetto Shape sia davvero una casella di testo prima di visualizzare qualsiasi informazione su di esso. Ciò è particolarmente importante quando si passa da una forma all’altra nel foglio di lavoro, poiché anche 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.
_Nota: _
Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.
ExcelTips è la tua fonte di formazione economica su Microsoft Excel.
Questo suggerimento (13377) si applica a Microsoft Excel 2007, 2010 e 2013.