Вы находитесь на странице: 1из 6

4/7/2015

Embedded Charts with VBA

Excel VBA Programming


Home
Getting Started
8 part section >>
VBA Programming Variables
6 Part Section >>
Conditional Logic
9 part section >>
Strings and String Functions
8 Part Section >>
Programming Loops
4 Part Section >>
Programming Arrays
4 Part Section >>
Subs and Functions
6 Part Section >>
Excel VBA and Text Files
2 Part Section >>
Excel VBA and User Forms
5 part section >>
An Excel Picture Viewer Project
6 Part Section
Excel VBA and Charts
Chart Sheets
Embedded Charts
Charts and User Forms, Part One
Charts and User Forms, Part Two
Reference: Chart Constants
A TreeView Project
A 6 part section >>

http://www.homeandlearn.org/vba_embedded_charts.html

1/6

4/7/2015

Embedded Charts with VBA

Excel VBA and Embedded Charts


This tutorial follows on from the previous one on Chart Sheets

Excel Data Analysis


5 Ways to Enhance Excel Data. Download the Free Whitepaper!

An embedded chart is one that is on the same spreadsheet as your data, rather than in a sheet all of
its own. In this lesson, you'll see how to add an XY Scatter chart. We'll use the same data as for the
Chart Sheet.
Create a new Sub in your coding window. Call it EmbeddedChartExample.
For embedded sheets, you need a slightly different reference. For a Chart Sheet, the referencing is
like this:
Application.Workbook.Chart
Because an embedded chart goes onto a worksheet, you need a reference to the Worksheet object:
Application.Workbook.Worksheet.ChartObject
Notice that an embedded sheet is a ChartObject rather than just a chart. When you add embedded
charts, you are adding them to a collection of Chart Objects. Chart sheets don't need to get added to a
collection.
Another complication is that embedded sheets are now shapes (Chart Objects are a special kind of
shape). So rather than having a Chart Object collection, embedded charts get added to the shapes
http://www.homeandlearn.org/vba_embedded_charts.html

2/6

4/7/2015

Embedded Charts with VBA

collection.
You start as before though, by setting up a Chart type:
Dim MyEmbeddedChart As Chart
However, examine this line of code to add an embedded chart:
Set MyEmbeddedChart = ActiveSheet.Shapes.AddChart.Chart
Again, we use Set to set up an object, this time called MyEmbeddedChart. Notice what comes after
the equals sign, though:
ActiveSheet.Shapes.AddChart.Chart
We start by referencing a worksheet, which can be the ActiveSheet. Next, we need the Shapes
collection. After Shapes, we use the method AddChart. You can have round brackets after AddChart.
Between the round brackets, you can specify the type of chart you want to add. Like this:
ActiveSheet.Shapes.AddChart(xlXYScatter).Chart
(To add a different type of chart, see the referencing section here:
VBA Chart Types and their Constants
We'll use a With Statement to add a chart type.)
You can also specify a location and size for your chart between the round brackets of AddChart:
AddChart(Left:=200, Width:=300, Top:=50, Height:=300)
All these five parameters are optional, however.
If you miss out the round brackets, Excel gives you the default chart, which is usually a column chart. If
you want to choose a chart type, you can add it on a new line:
MyEmbeddedChart.ChartType = xlXYScatter
Or use a With Statement, as we're going to do now. Add the following code for you Sub:
Dim MyEmbeddedChart As Chart
Set MyEmbeddedChart = ActiveSheet.Shapes.AddChart.Chart
With MyEmbeddedChart
.SetSourceData Source:=Sheets("Sheet1").Range("B2:B11")
.ChartType = xlXYScatterLines
End With
Your coding window should look like this:

This is more or less the same as you did for a Chart Sheet. This time, the ChartType is
xlXYScatterLines. An XY Scatter Line chart, by the way, is one that looks like this:
http://www.homeandlearn.org/vba_embedded_charts.html

3/6

4/7/2015

Embedded Charts with VBA

You could run your code right now. But let's add some formatting, first.
You can add formatting for the data points (the round dots above), and for the lines joining the dots.
The dots and the lines are all part of something called a SeriesCollection. In the chart above, you can
see we have only one series - Series 1. You can have more than one series, and they can be
formatted separately. To do so, you add an index number between round brackets:
SeriesCollection(1)
SeriesCollection(2)
SeriesCollection(3)
Etc
After a dot, you then type the formatting you need. The series dots are called Markers. To set a
background colour for your markers, the code is this:
.SeriesCollection(1).MarkerBackgroundColor = RGB(255, 255, 255)
So the properties is MarkerBackgroundColor. After an equal sign, you type a colour. Here, we're
using an RGB colour value. If you're meeting these for the first time then the three numbers between
the round brackets are for Red, Green, and Blue values. The numbers go from 0 to 255. Values of 255
in all three positions means white, and a 0 in all three position is black. For our background colour, we
went for white. You can have a mix of colours by doing something like this:
RGB(14, 125, 66)
As well as setting a colour for your markers, you can set a style and a size. The size is just a number:
. SeriesCollection(1).MarkerSize = 7
The style can any one of 12 values. To get round markers you need xlMarkerStyleCircle.
.SeriesCollection(1).MarkerStyle = xlMarkerStyleCircle
Here are all 12 marker styles. (Play around with them later.)
xlMarkerStyleAutomatic. Automatic markers
xlMarkerStyleCircle. Circular markers
xlMarkerStyleDash. Long bar markers
xlMarkerStyleDiamond. Diamond-shaped markers
xlMarkerStyleDot. Short bar markers
xlMarkerStyleNone. No markers
xlMarkerStylePicture. Picture markers
xlMarkerStylePlus. Square markers with a plus sign
xlMarkerStyleSquare. Square markers
xlMarkerStyleStar. Square markers with an asterisk
xlMarkerStyleTriangle. Triangular markers
xlMarkerStyleX. Square markers with an X
If you want to add a second data series to your chart, you use the Add method of the
SeriesCollection. Like this:
http://www.homeandlearn.org/vba_embedded_charts.html

4/6

4/7/2015

Embedded Charts with VBA

MyChart.SeriesCollection.Add Source:=ActiveSheet.Range("A2:A11")
You can add as many data series as you need with the above code.

Formatting the Chart


Two formatting options we can add are for the plot area (the area behind the lines and markers), and
the corners of the chart. To set a colour for the plot area, the code is this:
.PlotArea.Format.Fill.ForeColor.RGB = RGB(255, 255, 200)
Again, we have an RGB value after the equal sign. Before the equal sign, we have this:
PlotArea.Format.Fill.ForeColor.RGB
This is self-explanatory: you're formatting the foreground fill colour of the plot area.
To set rounded corners for your chart, the code is this:
ChartArea.RoundedCorners = True
Here's the adapted With Statement. Change your code to match:

You can run your programme, now. Click Run > Run Sub/User Form from the menu at the top of the
Visual Basic window, or press F5 on your keyboard. You should see a Scatter Lines chart appear on
your spreadsheet. (You can add a button to your spreadsheet, if you want. Then attached the Sub
when you see the dialogue box appear.)

Deleting Charts
You can delete all the charts on your spreadsheet quite easily. Because embedded charts are part of
a collection (the ChartObjects) collection, you can use a For Each loop.
Add a new Sub to you coding window. Call it DeleteCharts. Now add the following code for your new
sub:
Dim MyCharts As ChartObject
For Each MyCharts In ActiveSheet.ChartObjects
MyCharts.Delete

http://www.homeandlearn.org/vba_embedded_charts.html

5/6

4/7/2015

Embedded Charts with VBA

Next
The first line sets up a variable of type ChartObject. The For Each loop then accesses each
object in the ChartObjects collection. The code for the loop uses the Delete method to delete each
object that is in the collection.
And that's it! Run the code, or attach it to a button on your spreadsheet. Any chart you have on the
spreadsheet will be deleted.
Exercise
Play around with the code for embedded charts. Try a different MarkerStyle, change the MarkerSize,
and amend the numbers for the RGB colours.

In the next section, you'll learn how to add a chart to a user form.

Excel VBA Charts and User Forms >


Lots more free online course here on our main Home and Learn site
All course material copyright Ken Carney

http://www.homeandlearn.org/vba_embedded_charts.html

6/6