Cambio de texto en cuadros de texto en un gráfico (Microsoft Excel)
Don tiene varios gráficos en un libro de trabajo. Cada gráfico contiene dos cuadros de texto con las fechas de los datos actuales y las fechas en que se actualizó el gráfico. A Don le gustaría cambiar todo el texto en estos cuadros de texto del gráfico con una macro, pero no conoce la técnica adecuada para realizar la tarea.
Por supuesto, esto se puede hacer con una macro, pero debe comprender que hay una manera de hacerlo sin una macro. Puede, si lo desea, vincular lo que se muestra en un cuadro de texto al contenido de una celda. Esto significa que puede hacer que cada uno de sus cuadros de texto sea «dinámico» de modo que todo lo que necesita hacer es cambiar lo que está en la celda asociada. Esa celda podría contener un valor de texto, un valor numérico, una fecha o una fórmula; en realidad, no importa.
A continuación se explica cómo lograr esta técnica: Seleccione el cuadro de texto que desea asociar con una celda haciendo clic en él una sola vez. Los identificadores familiares deberían aparecer alrededor del exterior del cuadro de texto. Luego, en la barra de fórmulas, ingrese una referencia de celda. Puedes hacer esto ingresándolo así:
=$C$15
Esto vincula el contenido del cuadro de texto a lo que esté en la celda C15. También puede, si lo prefiere, eliminar lo que esté en la barra de fórmulas y, con la barra de fórmulas activa, hacer clic en la celda que desea vincular. La dirección de la celda debería aparecer en la barra de fórmulas. Presione Enter y la tarea está lista.
Ahora, escriba algo en la celda asociada. Cualquier cosa que escriba debería aparecer inmediatamente en el cuadro de texto.
Antes de que se puedan proporcionar algunas posibles respuestas relacionadas con macros, necesitará un poco de información sobre el modelo de objetos de Excel, al que se puede acceder a través de VBA.
Hay dos tipos de gráficos que pueden incluirse en un libro de trabajo: una hoja de gráficos y un gráfico incrustado. Las hojas de gráficos están representadas por un objeto Chart y pertenecen a la colección Charts. Los gráficos incrustados, por otro lado, están representados por un objeto Chart que pertenece a la colección ChartObjects que, a su vez, pertenece a un objeto de hoja de trabajo.
Si coloca un cuadro de texto en una hoja de gráfico real, se puede acceder a él de la siguiente manera:
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
Esta macro recorre cada hoja de gráfico y luego cada cuadro de texto en cada hoja de gráfico. Lo que haya en cada cuadro de texto se muestra en un cuadro de mensaje. Si desea cambiar el contenido de un cuadro de mensaje, todo lo que necesita hacer es establecer la propiedad Text del objeto TextRange.
Los cuadros de texto en los gráficos integrados son una historia diferente. ¿Por qué? Porque es posible que el cuadro de texto no sea realmente parte del gráfico, sino parte de la hoja de trabajo. En otras palabras, el «padre» del cuadro de texto podría ser el gráfico incrustado o podría ser la hoja de trabajo.
Una buena forma de averiguar si el cuadro de texto es parte del gráfico incrustado es crear una macro similar a la que se acaba de presentar. Este, sin embargo, puede recorrer cada gráfico incrustado en cada hoja de trabajo y encontrar cada forma (cuadro de texto) dentro de ese gráfico.
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
Cuando ejecute la macro, verá un cuadro de mensaje para cada cuadro de texto que es realmente un elemento secundario de los gráficos incrustados. Luego, verá un cuadro de mensaje para cualquier cuadro de texto que sea secundario de la hoja de trabajo. Como en la macro anterior, esta verifica para asegurarse de que el objeto Shape sea realmente un cuadro de texto antes de mostrar cualquier información al respecto. Esto es particularmente importante al recorrer cada forma en la hoja de trabajo, porque cualquier gráfico incrustado en la hoja también se considera parte de la colección Formas.
Como antes, para cambiar el texto contenido en un cuadro de texto, todo lo que necesita hacer es cambiar la propiedad Text del objeto TextRange.
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.
link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador]
.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (13377) se aplica a Microsoft Excel 2007, 2010 y 2013.