我正在使用vba绘制一个有两个数据系列的图表。但是图表上显示了三个图例。第三个图例对应于dataserie3,我没有添加到图表中,我不知道它来自哪里。也没有数据对应于这个要绘制的数据系列。
所以我的第一个问题是,你知道为什么要添加这个图例吗?这个数据系列是如何包含在图表中的?我搜索了这个问题,发现这是一个常见的问题。虽然所有的建议都是简单地删除这个数据系列,但我看不到背后的原因。
我的第二个问题是,vba中是否有可用的命令,如clc,clear all,close all,...在运行代码之前清除所有数据,从而避免任何不需要的数据被复制或转移到代码中?
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
2条答案
按热度按时间dfddblmv1#
所以,每当我使用不连续的数据制作聚集柱形图时,我都会遇到这个问题。在测试中,使用连续数据时,我没有遇到这个问题。如果我单步执行,并检查图表本身的数据,它看起来像是在我输入
XValues
时创建了一个数据系列)。我创建的数据序列如下:
我的解决方案是通过循环到我定义的数据序列之上的一个数据序列(在本例中,〉1(
i = .count to 2
))来删除这些数据序列。编辑1:
将更好地解释1个以上数据序列的来源(因为我只考虑了额外的+1,当我说有一个数据序列创建时,我指定
XValues
,但2以前存在由于我的数据)。当我创建图表时,我创建的是:
这会“立即”创建一个数据系列,使用的数据通常来自工作表单元格A1中开始的连续数据,或者基于当前的activecell。这甚至在我确定所需的图表类型(在我的例子中为xlColumnClustered)之前就发生了。
您可以在此时开始删除数据系列,但是如果您添加一个数据系列并指定
.SeriesCollection(1)
,则将始终只影响第一个数据系列,无论它是否是您使用newseries...创建的数据系列。如果图表无法识别初始源数据序列,您将得到一个错误,因此最好添加一个
.NewSeries
并影响“(1)”序列,然后返回并删除多余的序列。具体到我正在创建的图表,由于我的数据在电子表格中的显示方式,我有两个数据序列,我创建了1个数据序列,并按照我想要的方式操作它,然后删除多余的。
whlutmcx2#
而不是删除不需要的系列,您可以简单地选择任何空白单元格之前,创建图表
子测试()
变小单元格作为范围变小使用的范围作为范围
设置使用范围=活动工作表.使用范围
对于使用的每个单元格如果单元格.值=空,则为单元格.如果是下一个单元格,则选择结束
ActiveSheet.Shapes.AddChart.Select
末端子组件