Создание диаграмм с помощью VBA в Word 2010

Обзор: Visual Basic for Applications (VBA) дает возможность создавать диаграммы в Microsoft Word 2010 и Office Word 2007, помогая сохранять стандартную схему отображения во всех документах. Объектная модель Chart имеет структуру диаграммы Excel, что позволяет легко добавлять данные, выбирать тип диаграммы и вводить нужное форматирование. Кроме того, с помощью VBA можно получать данные из внешних источников и добавлять элементы управления для реализации интерактивной работы с диаграммой в документе Word.

Дата последнего изменения: 11 апреля 2011 г.

Применимо к: Office 2010 | Open XML | VBA | Visual Studio Tools for Microsoft Office | Word 2007 | Word 2007 Service Pack 2 | Word 2010

Применяется к: Microsoft Word 2010 | Office Word 2007 с пакетом обновления 2 (SP2)
Опубликовано: май 2010 г.
Автор:  Питер Грюнбаум (Peter Gruenbaum) (Возможно, на английском языке), SDK Bridge, LLC

Содержание

  • Добавление диаграммы

  • Условные обозначения

  • Форматирование диаграмм

  • Изменение размера и положения диаграммы

  • Добавление дополнительных рядов

  • Изменение типа диаграммы

  • Дополнительные функции диаграмм

  • Заключение

  • Дополнительные материалы

Щелкните, чтобы скопировать кодЗагрузка кода (Возможно, на английском языке)

С помощью Visual Basic for Applications (VBA) можно создавать диаграммы в Microsoft Word 2010 и Office Word 2007 с пакетом обновления 2 (SP2), которые будут обладать всей функциональностью диаграмм в Excel. Код VBA может получать данные из различных источников и создавать стандартизированные диаграммы в документах.

Есть ряд веских доводов в пользу создания диаграмм в Word с помощью VBA вместо создания их в Excel с последующим копированием в документ. Во-первых, если VBA уже используется для автоматического порождения документов, то создание диаграмм с помощью VBA будет намного более эффективным. Кроме того, с помощью VBA можно сделать документы интерактивными путем добавления элементов управления, таких как кнопки и раскрывающиеся списки, которые будут создавать или обновлять диаграммы.

Объектная модель Chart в Word достаточно несложная. Она содержит свойства, которые предоставляют доступ к объектам Excel, содержащим данные диаграммы, делая управление диаграммами аналогичным созданию диаграмм в Excel. Помимо этого объектная модель Chart в Word похожа на объектную модель Chart в Excel, поэтому можно просто взять любой код VBA, создающий диаграммы в Excel, и перенести его в Word. Дополнительные сведения см. в описании объекта Chart в справочнике для разработчика Word 2010.

В этой статье содержится два образца: базовая диаграмма в Word (WordChart.docm) и два файла (ExcelWithChart.xlsm и WordChartLinkedToExcel.docm), которые демонстрируют создание интерактивного документа Word, в котором используется диаграмма, созданная в Excel. Загрузить образцы кода можно в Коллекции исходных кодов MSDN (Возможно, на английском языке).

Добавление диаграммы

Чтобы вставить диаграмму, добавьте в документ объект Chart с помощью метода AddChart коллекции Shapes.

Примечание

В Office Word 2007 с пакетом обновления 2 (SP2) и Word 2010 ссылку на объект Chart также можно получить с помощью коллекции InlineShapes. Объекты Shape привязываются к текстовому диапазону, однако могут свободно перемещаться и их можно располагать в любом месте на странице. Объекты InlineShape обрабатываются как символы и размещаются как символы в строке текста. В примерах из данной статьи для получения ссылки на объект Chart используется коллекция Shapes. Дополнительные сведения об использовании коллекции InlineShapes с целью получения ссылки на объект Chart см. в статье Working With Charts.

С объектом Chart автоматически связывается электронная таблица Excel с помощью его свойства Workbook, которое содержит объекты Worksheet. Теперь мы создадим пример в Word.

Создайте новый документ Word и затем создайте новый макрос под названием "Insert Chart" (Вставка диаграммы). Для доступа к объектам Excel, таким как Workbook и Worksheet, необходимо указать ссылку на программный интерфейс Excel (API). В редакторе Visual Basic (VBE) в меню Tools (Сервис) выберите пункт References (Ссылки). Установите флажок напротив строки Microsoft Excel 14.0 Object Library, как показано на Рис 1.

Рис. 1. Выбор ссылки на Excel в диалоговом окне References (Ссылки)

Диалоговое окно ссылок в редакторе Visual Basic

Создайте две переменных: одну для диаграммы и другую для листа, на котором будут размещаться данные.

    Dim salesChart As Chart
    Dim chartWorkSheet As Excel.Worksheet

Теперь вставьте новую диаграмму в активный документ с помощью метода AddChart и сделайте ее значением переменной salesChart.

    Set salesChart = ActiveDocument.Shapes.AddChart.Chart

Задайте лист первым листом в рабочей книге, связанной с диаграммой.

    Set chartWorkSheet = salesChart.chartData.Workbook.WorkSheets(1)

При добавлении диаграммы электронная таблица Excel создается с некоторыми данными образца. Ограничьте объем этих данных диапазоном ячеек от A1 до B5. Это можно сделать с помощью метода Resize класса ListObject.

    chartWorkSheet.ListObjects("Table1").Resize chartWorkSheet.Range("A1:B5")

Измените заголовок для ряда 1 в данных образца на "Sales".

    chartWorkSheet.Range("Table1[[#Headers],[Series 1]]").FormulaR1C1 = "Sales"

Наконец, добавьте некоторые данные.

    chartWorkSheet.Range("A2").FormulaR1C1 = "Bikes"
    chartWorkSheet.Range("A3").FormulaR1C1 = "Accessories"
    chartWorkSheet.Range("A4").FormulaR1C1 = "Repairs"
    chartWorkSheet.Range("A5").FormulaR1C1 = "Clothing"
    chartWorkSheet.Range("B2").FormulaR1C1 = "1000"
    chartWorkSheet.Range("B3").FormulaR1C1 = "2500"
    chartWorkSheet.Range("B4").FormulaR1C1 = "4000"
    chartWorkSheet.Range("B5").FormulaR1C1 = "3000"

В этом примере значения просто задаются в коде. Если документ Word создается автоматически, то такие данные могут браться из другого источника. Данные также могут находиться в таблице в документе Word, а код VBA может извлекать значения и присваивать их формулам в ячейках листа.

Запустите макрос, должна появиться диаграмма аналогичная следующей.

Рис. 2.Базовая диаграмма

Простая линейчатая диаграмма

Для удаления закройте приложение Excel. Этот лист был всего лишь временным. Добавьте следующий код.

    salesChart.ChartData.Workbook.Application.Quit

Условные обозначения

По умолчанию в диаграмме имеются условные обозначения. Условные обозначения указывают тип отображаемых данных с помощью заголовков для столбцов данных. Условные обозначения особенно удобны при наличии более одного ряда данных в диаграмме, они позволяют определять соответствие между элементами диаграммы и столбцами в таблице данных. В текущем примере имеется только один столбец.

Получить доступ к условным обозначениям можно с помощью свойства Legend объекта Chart. Если использовать условные обозначения не нужно, их можно удалить с помощью метода LegendDelete.

    salesChart.Legend.Delete

Однако в нашем примере не нужно их удалять. Вместо этого разместите вокруг них рамку, присвоив свойству Visible свойства Line объекта Legend значение msoCTrue.

На следующем рисунке показана диаграмма с отформатированными условными обозначениями.

Рис. 3. Диаграмма с отформатированными условными обозначениями

Простая диаграмма с условными обозначениями

    salesChart.Legend.Format.Line.Visible = msoCTrue

Форматирование диаграмм

Данная диаграмма простая. Чтобы улучшить ее внешний вид, ее можно отформатировать, задав заливку фона равной цвету темы 1. Преимущество использования цвета темы Office состоит в том, что в диаграмме будет учитываться тема, которая выбрана для документа Word, и поэтому она соответствовать общему внешнему виду документа.

    With salesChart.ChartArea.Format.Fill
        .Visible = msoTrue
        .Solid
        .ForeColor.ObjectThemeColor = wdThemeColorAccent1
    End With

Затем добавьте черную границу вокруг диаграммы.

    With salesChart.ChartArea.Format.Line
        .Visible = msoCTrue
        .DashStyle = msoLineSolid
        .Weight = 3
    End With

Добавьте заголовок и отформатируйте его.

    salesChart.HasTitle = True
    With salesChart.ChartTitle
        .Characters.Font.Italic = True
        .Characters.Font.Size = 18
        .Format.TextFrame2.TextRange.Font.Fill.ForeColor.ObjectThemeColor = wdThemeColorMainLight2
        .Text = "2010 Sales"
    End With

Примечание

Если вы предпочитаете не использовать цвет темы Office, а хотите использовать какой-то определенный цвет, замените строку, в которой свойству ObjectThemeColor присваивается значение wdThemeColorMainLight2, на строку, в которой цвету шрифта присваивается значение RGB, например :

.Characters.Font.Color = RGB(0, 0, 100)

Наконец, добавьте надпись для оси y и измените максимальное значение на 5000.

    With salesChart.Axes(xlValue)
        .HasTitle = True
        .AxisTitle.Text = "Revenue ($)"
        .MaximumScale = 5000
    End With

На следующем рисунке показана диаграмма с примененной темой.

Рис. 4. Диаграмма с примененной темой

Диаграмма с форматированием

Чтобы посмотреть результат использования цветов тем Office, измените тему на вкладке Макет страницы документа Word. Вы увидите, как цвета диаграммы соответствующим образом изменятся.

Изменение размера и положения диаграммы

Чтобы изменить размер и положение диаграммы, не меняйте свойства самой диаграммы, а измените свойства родительского элемента диаграммы. Свойство Parent возвращает графический объект, который содержит диаграмму, и после размещения и установки размера этого графического контейнера диаграмма будет иметь правильный размер и расположение. Например, чтобы создать диаграмму 300 x 150 пикселей и поместить ее в 100 пикселях от левой стороны документа, выполните следующие действия.

    With salesChart.Parent
        .Left = 100
        .Width = 300
        .Height = 150
    End With

Добавление дополнительных рядов

Помимо графического представления одного столбца таблицы в диаграмме можно представлять несколько столбцов. Каждый столбец данных называется рядом. Чтобы добавить еще один ряд в диаграмму, добавьте данные для этого ряда и включите их в таблицу данных. Это необходимо сделать до строки, в которой выполняется выход из Excel. Код ниже добавляет ряд предсказаний и задает его тип равным xlLine, таким образом он будет отображаться в виде ломанной линии, а не столбчатой диаграммы.

    chartWorkSheet.ListObjects("Table1").Resize chartWorkSheet.Range("A1:C5")
    chartWorkSheet.Range("Table1[[#Headers],[Series 2]]").FormulaR1C1 = "Forecast"
    chartWorkSheet.Range("c2").FormulaR1C1 = "500"
    chartWorkSheet.Range("c3").FormulaR1C1 = "3000"
    chartWorkSheet.Range("c4").FormulaR1C1 = "2500"
    chartWorkSheet.Range("c5").FormulaR1C1 = "4000"
    salesChart.SeriesCollection(2).Type = xlLine

На следующем рисунке показана диаграмма с двумя добавленными рядами.

Рис. 5. Диаграмма с двумя рядами

Диаграмма с рядами

Изменение типа диаграммы

Объект Chart позволяет выбирать из большого числа типов диаграмм. Удалите второй ряд и измените тип диаграммы на трехмерную круговую диаграмму. Для этого нужно изменить свойство ChartType объекта Chart.

    salesChart.ChartType = xl3DPie

На следующем рисунке показана диаграмма после изменения ее типа на трехмерную круговую диаграмму.

Рис. 6. Задание типа трехмерной круговой диаграммы

Круговая диаграмма с темой

Дополнительные функции диаграмм

В образец кода также включен более сложный пример с диаграммами. В нем используются данные из внешнего файла Excel, и показано, как можно поместить в документ Word элемент управления для включения интерактивных возможностей. Он состоит из двух файлов: ExcelWithChart.xlsm и WordChartLinkedToExcel.docm. Для их использования выполните следующую процедуру.

Открытие примера интерактивной диаграммы в документе Word

  1. Откройте файл WordChartLinkedToExcel.docm.

  2. Откройте файл ExcelWithChart.xlsm.

  3. Выберите диаграмму в ExcelWithChart.xlsm.

  4. На ленте в ExcelWithChart.xlsm выберите Разработчик, укажите Макрос и выполните макрос CopyChartToWord. Он скопирует диаграмму в документ Word.

  5. Вернитесь в Word. Установите курсор сразу после раскрывающегося списка.

  6. Используйте элемент ComboBox для отображения столбцов графика, которые соответствуют кварталам Q1, Q2, Q3 и Q4.

Обработчик событий Change элемента ComboBox содержит следующий код. Имейте в виду, что в данном случае из-за использования внешних данных необходимо вызывать метод Activate объекта ChartData для получения доступа к Workbook. После изменения имени и значения ряда нужно обновить объект Chart для отображения изменений.

    Private Sub ComboBox1_Change()
        Dim salesChart As Chart
        Dim chartWorkSheet As Excel.Worksheet
        
        ' The chart is the second shape. (The first is the ComboBox.)
        Set salesChart = ActiveDocument.InlineShapes(2).Chart
            
        ' Activate the data before you can access the workbook
        salesChart.ChartData.Activate
    
        ' Get the first worksheet
        Set chartWorkSheet = salesChart.ChartData.Workbook.Worksheets(1)
        
        ' Choose the series based on the ComboBox value
        Select Case ComboBox1.Value
            Case "Q1"
                salesChart.SeriesCollection(1).Name = chartWorkSheet.Range("B1")
                salesChart.SeriesCollection(1).Values = "='Sheet1'!$B$2:$B$5"
                
            Case "Q2"
                salesChart.SeriesCollection(1).Name = chartWorkSheet.Range("C1")
                salesChart.SeriesCollection(1).Values = "='Sheet1'!$C$2:$C$5"
                
            Case "Q3"
                salesChart.SeriesCollection(1).Name = chartWorkSheet.Range("D1")
                salesChart.SeriesCollection(1).Values = "='Sheet1'!$D$2:$D$5"
                
            Case "Q4"
                salesChart.SeriesCollection(1).Name = chartWorkSheet.Range("E1")
                salesChart.SeriesCollection(1).Values = "='Sheet1'!$E$2:$E$5"
                
        End Select
        
        ' Refresh chart so changes are visible
        salesChart.Refresh
        
        ' Minimize Excel
        chartWorkSheet.Application.WindowState = xlMinimized
    End Sub

Заключение

Создавать диаграммы в Word можно с помощью объекта Chart. Метод Shapes.AddChart создает новую диаграмму. В ней можно работать со свойством Workbook; изменять размер таблицы для включения необходимых данных и использовать свойство Worksheet.Range для задания значений для диаграммы. Объект Chart позволяет использовать разные элементы форматирования в диаграмме, включая фон, условные обозначения, заголовок и оси. Также можно работать с внешними диаграммами Excel в Word, однако до обращения к рабочей книге с помощью кода VBA необходимо использовать метод ChartData.Activate.

Дополнительные материалы

Дополнительные сведения см. в следующих документах: