我正在尝试在Excel中组合一个VB脚本,创建一个“Stacked Bar Chart”。
通过此site中的示例,我执行了以下代码:
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
您将看到,我使用命名范围而不是使用单元格引用,因为数据将是动态的。
代码运行时没有显示任何错误,但使用的是最后一个系列,即
.Name = ActiveSheet.Range("$N$4")
覆盖以前绘制的数据。
我做错了什么?
答案 0 :(得分:3)
您暂时没有添加系列。您正在添加一个系列,并不断更改(覆盖)该系列的属性。因此,您最终只得到一个系列,其中包含您指定的属性。
以下可能效果更好:
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
您可能需要
ActiveChart.SeriesCollection(1).Delete
在AddChart2
声明之后 - 在我的机器上,它试图“猜测”一个系列并且非常非常错误......但上面的内容将其删除并留给我“好”系列。
另外 - 我发现在Mac上,我无法使用AddChart2
,但必须使用AddChart
。不确定这对你是否重要。