Chart Object Model in Word & PowerPoint

Over the next three posts this blog will cover some of the charting changes that have been made in Office 2010, many of which are the direct result of customer feedback.  

As part of the Office 2007 release we overhauled charting throughout Office; however an OM for Word and PowerPoint was not provided. In response to your feedback, in Office 2007 SP2 and Office 2010 we’ve exposed a unified/consistent charting OM within Word and PowerPoint, so that you can write solutions against any of the applications that take advantage of the new charting capabilities. The chart is drawn by the same shared Office drawing layer so if you are familiar with the OM in Excel 2007 you can easily create a similar solution in Word or PowerPoint.

Many times companies have a need to create charts in documents or presentations based on client specific data. In many cases these charts have a standard format, size and position which make them a prime candidate for automation. This OM can be used as a part of a solution to automate the generation of these charts which can save many hours of manual labor.

Let’s take a look at an example. Here is an example of how to create a chart in PowerPoint based on data your application has retrieved and apply standard formatting.

Sub CreateChart()

Dim myChart As Chart

Dim gChartData As ChartData

Dim gWorkBook As Excel.Workbook

Dim gWorkSheet As Excel.Worksheet


Set myChart = ActivePresentation.Slides(1).Shapes.AddChart.Chart ‘create/set chart

Set gChartData = ActivePresentation.Slides(1).Shapes(1).Chart.ChartData ‘Set chartdata

Set gWorkBook = gChartData.Workbook ‘Set Workbook object reference

Set gWorkSheet = gWorkBook.Worksheets(1) ‘Set Worksheet object reference


gWorkSheet.ListObjects(“Table1”).Resize gWorkSheet.Range(“A1:B5”) ‘Add Data

gWorkSheet.Range(“Table1[[#Headers],[Series 1]]”).Value = “Sales”

gWorkSheet.Range(“a2”).Value = “Bikes”

gWorkSheet.Range(“a3”).Value = “Accessories”

gWorkSheet.Range(“a4”).Value = “Repairs”

gWorkSheet.Range(“a5”).Value = “Clothing”

gWorkSheet.Range(“b2”).Value = “1000”

gWorkSheet.Range(“b3”).Value = “2500”

gWorkSheet.Range(“b4”).Value = “4000”

gWorkSheet.Range(“b5”).Value = “3000”


With myChart ‘Apply Style

    .ChartStyle = 4

    .ApplyLayout 4


End With


myChart.HasTitle = True ‘Add Title


With myChart.ChartTitle ‘Format title

    .Characters.Font.Size = 18

    .Text = “2007 Sales”

End With


With myChart.Axes(xlValue) ‘Add axis title

    .HasTitle = True

    .AxisTitle.Text = “$”

End With


myChart.ApplyDataLabels ‘Add data labels


Set gWorkSheet = Nothing




Set gWorkBook = Nothing

Set gChartData = Nothing

Set myChart = Nothing


End Sub

As you can see a chart is still represented by a ChartObject and in this case is contained by a Shape. It can be contained by either an InlineShape or Shape in Word and a Shape in PowerPoint. From there the ChartObject is generally a mirror of what you would see in Excel. Some key differences are:

  • Properties/Methods that normally accept a range object in Excel now accept a string of the range address in Word and PowerPoint.
  • A new object, ChartData, has been added to Word and PowerPoint to access the underlying linked or embedded data for a chart.

The ability to programmatically manipulate charts in Word and PowerPoint also opens the door for a variety of interesting solutions around dynamically changing the appearance of your charts during a presentation or creating an interactive Word document. Here is an example of a solution to add data labels to a chart during a presentation:

Private Sub BtnDataLabels_Click()


Set myChart = ActivePresentation.Slides(1).Shapes(1).Chart ‘Set chart object reference


myChart.ApplyDataLabels ‘Add data labels


Set myChart = Nothing


End Sub

Try it out and let us know what you think!