Работа с диаграммами
В Word 2007 с пакетом обновления 2 (SP2) или более поздней версии можно программными средствами осуществлять доступ к диаграммам с использованием объектной модели VBA в приложении Word. Объект диаграммы в Word создается посредством той же общей реализации слоя документа Office, которая используется в Excel, поэтому если вы знакомы с объектной моделью для создания диаграмм в Excel, то можете легко перенести VBA-код Excel, осуществляющий операции с диаграммой, в VBA-код Word.
Использование объекта Chart
В Word диаграмма представлена объектом Chart . Объект Chart содержится inlineShape или Shape. Используйте коллекцию InlineShapes или Shapes объекта Document для добавления новых диаграмм или доступа к существующим диаграммам. Для добавления новой диаграммы используется метод AddChart для обеих коллекций, указывающий тип и расположение диаграммы в документе.
Используйте свойство HasChart , чтобы определить, содержит ли объект InlineShape или Объект Shape диаграмму. Если Функция HasChart возвращает значение True, можно использовать свойство Chart , чтобы получить ссылку на объект Chart , представляющий диаграмму. На этом этапе реализация практически идентична реализации Excel и кода VBA, в большинстве случаев может быть передан между двумя программами.
Например, следующий пример кода VBA добавляет новую двухуровневую гистограмму с накоплением на активный лист Excel и задает исходные данные диаграммы в диапазонЕ A1:C3 на листе Sheet1.
Sub AddChart_Excel() Dim objShape As Shape ' Create a chart and return a Shape object reference. ' The Shape object reference contains the chart. Set objShape = ActiveSheet.Shapes.AddChart(XlChartType.xlColumnStacked100) ' Ensure the Shape object contains a chart. If so, ' set the source data for the chart to the range A1:C3. If objShape.HasChart Then objShape.Chart.SetSourceData Source:=Range("'Sheet1'!$A$1:$C$3") End If End Sub
Для сравнения в следующем примере кода VBA добавляется новая двухуровневая гистограмма с накоплением в активный документ в и задает исходные данные диаграммы в диапазонЕ A1:C3 из данных диаграммы, связанных с диаграммой.
Sub AddChart_Word() Dim objShape As InlineShape ' Create a chart and return a Shape object reference. ' The Shape object reference contains the chart. Set objShape = ActiveDocument.InlineShapes.AddChart(XlChartType.xlColumnStacked100) ' Ensure the Shape object contains a chart. If so, ' set the source data for the chart to the range A1:C3. If objShape.HasChart Then objShape.Chart.SetSourceData Source:="'Sheet1'!$A$1:$C$3" End If End Sub
Основные различия между объектом Chart в Word и объектом ChartObject в Excel
Несмотря на то, что работа с диаграммами между Excel и Word в большинстве случаев практически идентична, полезно определить важные области, в которых две реализации отличаются:
- Для программного создания объекта ChartData или управления ими в Word требуется запуск Excel.
- Свойства диаграммы и методы для управления листом диаграммы не реализованы. Концепция листа диаграммы связана с Excel. Листы диаграмм не используются в Word, поэтому методы и свойства, используемые для ссылки на лист диаграммы или управления им, были отключены для этих приложений.
- Свойства и методы, которые в Excel обычно принимают ссылку на объект Range , теперь принимают адрес диапазона в Word. Объект Range в Word отличается от объекта Range в Excel. Чтобы избежать путаницы, объектная модель диаграммы в Word принимает строки адресов диапазона, такие как «=’Sheet1′!$A$1:$D$5», в тех свойствах и методах (например, метод SetSourceData объекта Chart), которые принимают объекты Range в Excel.
- В объектные модели VBA для Word добавлен новый объект ChartData для предоставления доступа к базовым связанным или внедренным данным для диаграммы. С каждой диаграммой связаны данные, используемые для рисования диаграммы в Word. Данные диаграммы могут быть связаны из внешней книги Excel или внедрены как часть самой диаграммы. Объект ChartData инкапсулирует доступ к данным для данной диаграммы в Word. Например, в следующем примере кода VBA отображаются, а затем свернуты данные диаграммы для каждой диаграммы, содержащейся в активном документе в Word.
Sub ShowWorkbook_Word() Dim objShape As InlineShape ' Iterates each inline shape in the active document. ' If the inline shape contains a chart, then display the ' data associated with that chart and minimize the application ' used to display the data. For Each objShape In ActiveDocument.InlineShapes If objShape.HasChart Then ' Activate the topmost window of the application used to ' display the data for the chart. objShape.Chart.ChartData.Activate ' Minimize the application used to display the data for ' the chart. objShape.Chart.ChartData.Workbook.Application.WindowState = -4140 End If Next End Sub
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Объект Chart (Excel)
Диаграмма может представлять собой внедренную диаграмму (содержащуюся в объекте ChartObject) или отдельный лист диаграммы.
Коллекция Charts содержит объект Chart для каждого листа диаграммы в книге. Чтобы вернуть один объект Chart, используйте синтаксис Charts (индекс), где индекс — это номер индекса или имя листа диаграммы.
Номер индекса диаграммы представляет положение листа диаграммы на панели вкладок книги. Charts(1) — это первая (крайняя левая) диаграмма в книге; Charts(Charts.Count) — последняя (самая правая).
Все листы диаграмм включаются в число индексов, даже если они скрыты. Имя листа диаграммы отображается на вкладке книги для диаграммы. Используйте свойство Name объекта ChartObject, чтобы задать или возвратить имя диаграммы.
В следующем примере изменяется цвет ряда 1 на листе диаграммы 1.
Charts(1).SeriesCollection(1).Format.Fill.ForeColor.RGB = rgbRed
В следующем примере диаграмма Sales (Продажи) перемещается в конец активной книги.
Charts("Sales").Move after:=Sheets(Sheets.Count)
Объект Chart также является элементом коллекции Sheets, который содержит все листы книги (рабочие листы и листы диаграммы). Чтобы вернуть один лист, используйте синтаксис Sheets (индекс), где индекс — это номер индекса или имя листа.
Если диаграмма является активным объектом, для ссылки на нее можно использовать свойство ActiveChart. Лист диаграммы активен, если пользователь выбрал его или он активирован с помощью метода Activate объекта Chart или метода Activate объекта ChartObject.
В следующем примере активируется лист диаграммы 1, а затем задается тип и заголовок диаграммы.
Charts(1).Activate With ActiveChart .Type = xlLine .HasTitle = True .ChartTitle.Text = "January Sales" End With
Внедренная диаграмма активна, если пользователь выбрал ее или объект ChartObject, в котором она находится, активирован с помощью метода Activate.
В следующем примере активируется внедренная диаграмма 1 на листе 1, а затем задается тип и название диаграммы. Обратите внимание, что после активации внедренной диаграммы код в этом примере совпадает с предыдущим примером. С помощью свойства ActiveChart можно написать код на языке Visual Basic, который может ссылаться на внедренную диаграмму или на лист диаграммы (в зависимости от активного объекта).
Worksheets(1).ChartObjects(1).Activate ActiveChart.ChartType = xlLine ActiveChart.HasTitle = True ActiveChart.ChartTitle.Text = "January Sales"
Если лист диаграммы является активным листом, для ссылки на него можно использовать свойство ActiveSheet. В следующем примере используется метод Activate для активации листа диаграммы Chart1, а затем задается синий цвет для ряда 1 на диаграмме.
Charts("chart1").Activate ActiveSheet.SeriesCollection(1).Format.Fill.ForeColor.RGB = rgbBlue
События
Методы
Свойства
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Обратная связь
Были ли сведения на этой странице полезными?
Обратная связь
Отправить и просмотреть отзыв по
Объект Chart (Project)
Объект Chart представляет диаграмму для отчета в Project.
Замечания
Объект Chart в Project включает стандартные элементы, которые другие приложения Office реализуют для Office Art. Например, см. объект Chart в объектной модели VBA для Word, Excel и PowerPoint.
В Project диаграмма представлена объектом Chart , который содержится в объекте Shape или коллекции ShapeRange в объекте Report . Схему, показывающую объект Chart в иерархии объектной модели Project, см. в разделе Схема объектов приложений и проектов.
Запись макроса для объекта Chart не реализована. То есть, когда вы записываете макрос в Project и вручную добавляете диаграмму, добавляете элементы диаграммы или вручную форматируете диаграмму в отчете, шаги по добавлению диаграммы и управлению ими не записываются.
Используйте метод Shapes.AddChart для добавления диаграммы в отчет. Чтобы определить, содержит ли диаграмма shape или ShapeRange , используйте метод HasChart .
Объект Chart в Project не реализует события. Таким образом, диаграмма в Project не может быть анимирована для взаимодействия с событиями мыши или реагирования на такие события, как Выбор или Вычисление, как это возможно в Excel.
Пример
В следующем примере создается простая скалярная диаграмма для задач в активном проекте. На диаграмме показаны поля по умолчанию «Фактические трудозаготовки«, «Оставшиеся трудозаготовки» и «Трудозатреки«.
Чтобы создать некоторые примеры данных, добавьте четыре задачи в новый проект, назначьте им локальные ресурсы и задайте различные значения длительности и фактической работы. Например, попробуйте использовать значения в таблице 1.
Таблица 1. Пример данных для простой диаграммы
| Имя задачи | Duration | Фактическая работа |
|---|---|---|
| T1 | 2d | 16 |
| T2 | 5d | 19 |
| T3 | 4d | 7 |
| T4 | 2d | 0 |
Sub AddSimpleScalarChart() Dim chartReport As Report Dim reportName As String ' Add a report. reportName = "Simple scalar chart" Set chartReport = ActiveProject.Reports.Add(reportName) ' Add a chart. Dim chartShape As Shape Set chartShape = ActiveProject.Reports(reportName).Shapes.AddChart() chartShape.Chart.SetElement (msoElementChartTitleCenteredOverlay) chartShape.Chart.ChartTitle.Text = "Sample Chart for the Test1 project" End Sub
При запуске макроса AddSimpleScalarChart Project создает отчет и добавляет диаграмму. Диаграмма имеет функции по умолчанию, за исключением того, что заголовок указан свойством SetElement , наложенным на диаграмму, а не позицией по умолчанию над диаграммой.
Рис. 1. На диаграмме показаны данные в таблице 1
Чтобы удалить диаграмму, можно удалить фигуру, содержащую диаграмму. Следующий макрос удаляет диаграмму в отчете, созданном макросом AddSimpleScalarChart , и оставляет пустой отчет в активном представлении.
Sub DeleteTheShape() Dim i As Integer Dim reportName As String Dim theShape As MSProject.Shape reportName = "Simple scalar chart" For i = 1 To ActiveProject.Reports.Count If ActiveProject.Reports(i).Name = reportName Then Set theShape = ActiveProject.Reports(i).Shapes(1) theShape.Delete End If Next i End Sub
Чтобы удалить отчет, перейдите в другое представление и откройте диалоговое окно Организатор . Невозможно удалить отчет, пока отчет активен. Организатор доступен на вкладке РАЗРАБОТЧИК ленты, а также на вкладке КОНСТРУКТОР в группе Отчет в меню Управление. На вкладке Отчеты диалогового окна Организатор выберите Простая скалярная диаграмма в области проекта, а затем нажмите кнопку Удалить. Кроме того, выполните следующий макрос, чтобы удалить отчет.
Sub DeleteTheReport() Dim i As Integer Dim reportName As String reportName = "Simple scalar chart" ' To delete the active report, change to another view. ViewApplyEx Name:="&Gantt Chart" ActiveProject.Reports(reportName).Delete End Sub
Как создать график в excel vba
Argument ‘Topic id’ is null or empty
Сейчас на форуме
© Николай Павлов, Planetaexcel, 2006-2023
info@planetaexcel.ru
Использование любых материалов сайта допускается строго с указанием прямой ссылки на источник, упоминанием названия сайта, имени автора и неизменности исходного текста и иллюстраций.
| ООО «Планета Эксел» ИНН 7735603520 ОГРН 1147746834949 |
ИП Павлов Николай Владимирович ИНН 633015842586 ОГРНИП 310633031600071 |