Question

I'm trying to put together a VB script in Excel which creates a 'Stacked Bar Chart'.

From examples found in this site, I did the following code:

Sub AddNewSeries()
    ActiveSheet.Shapes.AddChart2(297, xlBarStacked).Select
    With ActiveChart.SeriesCollection.NewSeries
        .Name = ActiveSheet.Range("$E$3")
        .Values = ActiveSheet.Range("IFPStart")
        .XValues = ActiveSheet.Range("IFPPN")
        .Name = ActiveSheet.Range("$G$4")
        .Values = ActiveSheet.Range("IFPBC")
        .XValues = ActiveSheet.Range("IFPPN")
         .Name = ActiveSheet.Range("$H$4")
        .Values = ActiveSheet.Range("IFPBT")
        .XValues = ActiveSheet.Range("IFPPN")
         .Name = ActiveSheet.Range("$I$4")
        .Values = ActiveSheet.Range("IFPEC")
        .XValues = ActiveSheet.Range("IFPPN")
         .Name = ActiveSheet.Range("$J$4")
        .Values = ActiveSheet.Range("IFPFin")
        .XValues = ActiveSheet.Range("IFPPN")
        .Name = ActiveSheet.Range("$K$4")
        .Values = ActiveSheet.Range("IFPIMS")
        .XValues = ActiveSheet.Range("IFPPN")
        .Name = ActiveSheet.Range("$L$4")
        .Values = ActiveSheet.Range("IFPInf")
        .XValues = ActiveSheet.Range("IFPPN")
        .Name = ActiveSheet.Range("$M$4")
        .Values = ActiveSheet.Range("IFPPT")
        .XValues = ActiveSheet.Range("IFPPN")
        .Name = ActiveSheet.Range("$N$4")
        .Values = ActiveSheet.Range("IFPSols")
        .XValues = ActiveSheet.Range("IFPPN")
    End With
End Sub

You'll see that rather than using cell references, I use named ranges because the data will be dynamic.

The code does run without any errors displayed, but the last series used i.e.

.Name = ActiveSheet.Range("$N$4")

overwrites the previously plotted data.

What am I doing wrong?

Was it helpful?

Solution

You are not adding the series one at at time. You are adding one series, and keep changing (overwriting) the properties of that series. Thus you end up with just one series, with the properties that you specified.

The following might work better:

Sub AddNewSeries()
    ActiveSheet.Shapes.AddChart2(297, xlBarStacked).Select
    With ActiveChart.SeriesCollection.NewSeries
        .XValues = ActiveSheet.Range("IFPPN")
        .Name = ActiveSheet.Range("$E$3")
        .Values = ActiveSheet.Range("IFPStart")
    End With
    With ActiveChart.SeriesCollection.NewSeries
        .XValues = ActiveSheet.Range("IFPPN")
        .Name = ActiveSheet.Range("$G$4")
        .Values = ActiveSheet.Range("IFPBC")
    End With
    With ActiveChart.SeriesCollection.NewSeries
        .XValues = ActiveSheet.Range("IFPPN")
         .Name = ActiveSheet.Range("$H$4")
        .Values = ActiveSheet.Range("IFPBT")
    End With
    With ActiveChart.SeriesCollection.NewSeries
        .XValues = ActiveSheet.Range("IFPPN")
         .Name = ActiveSheet.Range("$I$4")
        .Values = ActiveSheet.Range("IFPEC")
    End With
    With ActiveChart.SeriesCollection.NewSeries
        .XValues = ActiveSheet.Range("IFPPN")
         .Name = ActiveSheet.Range("$J$4")
        .Values = ActiveSheet.Range("IFPFin")
    End With
    With ActiveChart.SeriesCollection.NewSeries
        .XValues = ActiveSheet.Range("IFPPN")
        .Name = ActiveSheet.Range("$K$4")
        .Values = ActiveSheet.Range("IFPIMS")
    End With
    With ActiveChart.SeriesCollection.NewSeries
        .XValues = ActiveSheet.Range("IFPPN")
        .Name = ActiveSheet.Range("$L$4")
        .Values = ActiveSheet.Range("IFPInf")
    End With
    With ActiveChart.SeriesCollection.NewSeries
        .XValues = ActiveSheet.Range("IFPPN")
        .Name = ActiveSheet.Range("$M$4")
        .Values = ActiveSheet.Range("IFPPT")
    End With
    With ActiveChart.SeriesCollection.NewSeries
        .XValues = ActiveSheet.Range("IFPPN")
        .Name = ActiveSheet.Range("$N$4")
        .Values = ActiveSheet.Range("IFPSols")
    End With
End Sub

It is possible that you need a

ActiveChart.SeriesCollection(1).Delete

Right after the AddChart2 statement - on my machine, it tried to "guess" a series and got it very very wrong… but the above removed it and left me just the "good" series.

Also - I found that on the Mac, I could not use AddChart2 but had to use AddChart instead. Not sure if that matters for you.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top