With Excel 2010 I have the following code that creates a chart("BMS Data Chart") on a separate sheet from data from a table ("BMS_Data"). All works well except the Chart Series Names are Series1, Series2, etc... How can I use VBA to set these series names to the column header name of the table at time of creation?
Sub createBMSChart()
Dim cht As ChartObject
Dim ws As Worksheet
Dim myCht As ChartObject
Dim objSeries As Series
Dim srs As Series
Dim cWs As Worksheet
Dim tbl As Range
Sheets.add after:=Worksheets("BMS Data")
ActiveSheet.Name = "BMS Data Chart"
Set cWs = ActiveSheet
cWs.Tab.Color = vbGreen
Set ws = Worksheets("BMS Data")
Set tbl = ws.Range("BMS_Data")
Set cht = cWs.ChartObjects.add(Left:=10, Width:=1300, Top:=10, Height:=550)
cht.Chart.SetSourceData Source:=tbl
cht.Name = "BMS Data Chart"
Set myCht = cht
With myCht.Chart
.ChartType = xlLine
.HasTitle = True
.ChartTitle.Text = "BMS Data Chart"
.Legend.Position = xlBottom
.Axes(xlCategory).CategoryType = xlCategoryScale
.Axes(xlCategory).TickLabelPosition = xlLow
.Axes(xlCategory).MajorTickMark = xlNone
.Axes(xlCategory).AxisBetweenCategories = False
End With
For Each srs In cWs.ChartObjects("BMS Data Chart").Chart.SeriesCollection
srs.Format.Line.Weight = 1
Next
cWs.Activate
End Sub
Think you can do this by referencing the table and the header row will automatically be used as the series name. I've only changed the two starred lines below (change the table name as necessary):
Sub createBMSChart()
Dim cht As ChartObject
Dim ws As Worksheet
Dim myCht As ChartObject
Dim objSeries As Series
Dim srs As Series
Dim cWs As Worksheet
Dim tbl As ListObject
Sheets.Add after:=Worksheets("BMS Data")
ActiveSheet.Name = "BMS Data Chart"
Set cWs = ActiveSheet
cWs.Tab.Color = vbGreen
Set ws = Worksheets("BMS Data")
Set tbl = ws.ListObjects("Table1") '********************************************
Set cht = cWs.ChartObjects.Add(Left:=10, Width:=1300, Top:=10, Height:=550)
cht.Chart.SetSourceData Source:=tbl.Range '********************************************
cht.Name = "BMS Data Chart"
Set myCht = cht
With myCht.Chart
.ChartType = xlLine
.HasTitle = True
.ChartTitle.Text = "BMS Data Chart"
.Legend.Position = xlBottom
.Axes(xlCategory).CategoryType = xlCategoryScale
.Axes(xlCategory).TickLabelPosition = xlLow
.Axes(xlCategory).MajorTickMark = xlNone
.Axes(xlCategory).AxisBetweenCategories = False
End With
For Each srs In cWs.ChartObjects("BMS Data Chart").Chart.SeriesCollection
srs.Format.Line.Weight = 1
Next
cWs.Activate
End Sub