我正在使用vba绘制具有两个数据系列的图表。但是,在图表上它显示了三个图例。第三个图例对应于dataserie3,我没有将其添加到图表中,也不知道它来自何处。也没有与此数据序列相对应的数据。
所以我的第一个问题是,您是否知道为什么添加此图例以及该数据系列如何包含在图表中?我正在搜索此问题,发现这是一个常见问题。尽管所有建议只是删除该数据系列,但我看不到其背后的原因。
我的第二个问题是,vba中是否有任何命令(例如clc),全部清除,全部关闭... ...在运行代码之前清除所有数据,从而避免复制任何不需要的数据或转移到代码了吗?
Dim ws As Worksheet
Dim rng1X As Range, rng1Y As Range, rng2X As Range, rng2Y As Range
Dim objChrt As ChartObject
Dim chrt As Chart
Set ws = Sheets("Sheet2")
With ws
.Shapes.AddChart
Set objChrt = .ChartObjects(.ChartObjects.Count)
Set chrt = objChrt.Chart
With chrt
.ChartType = xlXYScatterSmoothNoMarkers
.SeriesCollection.NewSeries
.SeriesCollection(1).XValues = rng1X
.SeriesCollection(1).Values = rng1Y
.SeriesCollection(1).Name = "Flow1"
.SeriesCollection.NewSeries
.SeriesCollection(2).XValues = rng2X
.SeriesCollection(2).Values = rng2Y
.SeriesCollection(2).Name = "Flow2"
.HasLegend = True
.Legend.Position = xlLegendPositionTop
.Parent.Name = "Chart1"
End With
答案 0 :(得分:1)
因此,每 次使用非连续数据制作聚簇柱形图时,都会遇到此问题。在测试中,使用连续数据对我而言并没有发生这种情况。如果我单步执行并检查图表本身的数据,当我输入XValues
时,好像创建了一个数据系列。
我创建如下数据系列:
With ActiveChart
.ChartType = xlColumnClustered
.SeriesCollection.NewSeries
.SeriesCollection(1).Name = " "
.SeriesCollection(1).Values = "=Overview!$C$29,Overview!$C$32,Overview!$C$35,Overview!$C$38,Overview!$C$41"
.SeriesCollection(1).XValues = "={"" ""}"
End With
我的解决方案是通过循环到我定义的数据序列之上(在这种情况下,> 1(i = .count to 2
))来删除数据序列。
With ActiveChart
If .SeriesCollection.Count > 1 Then
For i = .SeriesCollection.Count To 2 Step -1
.SeriesCollection(i).Delete
Next
End If
End With
编辑1:
将对来自多个数据序列的来源进行更好的解释(因为当我说在指定XValues
时创建了一个数据序列时,我只考虑了另外的+1,但是存在2个以前是由于我的数据)。
创建图表时,我将创建为:
.Shapes.AddChart.Select
此立即创建数据系列,使用的数据通常来自于工作表单元格A1中或基于当前活动单元格的连续数据。在我什至确定所需的图表类型之前(在我的情况下为xlColumnClustered),就会发生这种情况。
此时,您可以开始删除数据系列,尽管如果添加一个数据系列并指定.SeriesCollection(1)
,则始终只会影响第一个数据系列,而无论它是否是使用newseries创建的。 / p>
如果图表无法识别初始源数据系列,则会出现错误,因此最好添加.NewSeries
并影响“(1)”系列,然后返回并稍后删除多余的部分
特定于我创建的图表,由于我的数据在电子表格中的显示方式,我.AddChart
的那一刻就有两个数据系列。我创建了1个数据系列,并根据需要对其进行了处理,然后删除了多余的数据。