Изменение текста в текстовых полях на диаграмме (Microsoft Excel)
У Дона есть несколько диаграмм в книге. Каждая диаграмма содержит два текстовых поля с датами текущих данных и датами обновления диаграммы. Дон хотел бы изменить весь текст в этих текстовых полях диаграммы с помощью макроса, но не знает, как правильно выполнить задачу.
Это, конечно, можно сделать с помощью макроса, но вы должны понимать, что есть способ сделать это и без макроса. Вы можете, если хотите, связать то, что отображается в текстовом поле, с содержимым ячейки. Это означает, что вы можете сделать каждое из ваших текстовых полей «динамическим», чтобы все, что вам нужно было сделать, это изменить то, что находится в связанной ячейке. Эта ячейка может содержать текстовое значение, числовое значение, дату или формулу — на самом деле это не имеет значения.
Вот как достичь этой техники: выберите текстовое поле, которое вы хотите связать с ячейкой, щелкнув по нему один раз. Знакомые маркеры должны появиться за пределами текстового поля. Затем в строке формул введите ссылку на ячейку. Вы можете сделать это, введя его так:
=$C$15
Это связывает содержимое текстового поля с содержимым ячейки C15. Вы также можете, если хотите, удалить все, что находится на панели формул, и, когда панель формул активна, щелкните ячейку, которую вы хотите связать. Адрес ячейки должен появиться в строке формул. Нажмите Enter, и задача выполнена.
Теперь введите что-нибудь в соответствующую ячейку. Все, что вы вводите, должно немедленно отображаться в текстовом поле.
Прежде чем можно будет дать некоторые потенциальные ответы, связанные с макросами, вам понадобится немного информации об объектной модели Excel, доступной через VBA.
В книге могут содержаться диаграммы двух типов: лист диаграммы и встроенная диаграмма. Листы диаграммы представлены объектом Chart и принадлежат коллекции Charts. С другой стороны, встроенные диаграммы представлены объектом Chart, который принадлежит коллекции ChartObjects, которая, в свою очередь, принадлежит объекту рабочего листа.
Если вы разместите текстовое поле на реальном листе диаграммы, то к нему можно будет получить доступ следующим образом:
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
Этот макрос проходит через каждый лист диаграммы, а затем через каждое текстовое поле на каждом листе диаграммы. Все, что находится в каждом текстовом поле, затем отображается в окне сообщения. Если вы хотите изменить содержимое окна сообщения, все, что вам нужно сделать, это установить свойство Text объекта TextRange.
Другое дело — текстовые поля на встроенных диаграммах. Зачем? Поскольку возможно, что текстовое поле на самом деле не является частью диаграммы, а является частью рабочего листа. Другими словами, «родительским элементом» текстового поля может быть либо встроенная диаграмма, либо рабочий лист.
Хороший способ узнать, является ли текстовое поле частью встроенной диаграммы, — создать макрос, аналогичный только что представленному. Однако этот может пройти по каждой встроенной диаграмме на каждом листе и найти каждую фигуру (текстовое поле) в этой диаграмме.
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
Когда вы запустите макрос, вы увидите окно сообщения для каждого текстового поля, которое действительно является дочерним элементом встроенных диаграмм. Затем вы увидите окно сообщения для любых текстовых полей, которые являются дочерними для рабочего листа. Как и в предыдущем макросе, этот макрос проверяет, действительно ли объект Shape является текстовым полем, перед отображением любой информации о нем. Это особенно важно при пошаговом обходе каждой фигуры на листе, потому что любые встроенные диаграммы на листе также считаются частью коллекции фигур.
Как и раньше, чтобы изменить текст, содержащийся в текстовом поле, все, что вам нужно сделать, это изменить свойство Text объекта TextRange.
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (13377) применим к Microsoft Excel 2007, 2010 и 2013.