Excel - 同一工作表上的多个图表 - 我的代码的后续执行会错误地替换系列

时间:2015-08-24 15:51:20

标签: excel vba excel-vba charts series

我想通过同一工作表上的多个嵌入式图表显示对相同数据的不同解释。我第一次执行VBA代码时工作正常,但随后代码的使用最终会出现意外行为。

我在一个单元格上调用了一个值更改事件,该单元格是一个类别的下拉列表,可以从中选择一个值。然后,该选择过滤下面的数据。然后,多个嵌入图表将根据过滤后的数据显示解释。

具体来说,第一个嵌入式图表有一个"得分"在我的数据中的一列y轴上与"记录"在相应列的x轴上。

第二个嵌入式图表具有相同的"分数"在y轴上,但有一个不同的列作为x轴。

第一个图表会从第二个图表中获取数据,第二个图表会移动到工作表上的其他位置。

我想要发生的是: - 任何以前要删除的图表 - 图表保持嵌入状态并显示刷新的数据 - 让图表使用相同的数据但没有交换系列的问题......

这是我使用过的代码:

Chart:
WS.Shapes(1).Delete


WS.Shapes.AddChart.Select

ActiveChart.ChartTitle.Text = "Acuity Scores"
WS.Shapes(1).Top = 0
WS.Shapes(1).Left = 500
WS.Shapes(1).Height = 250
WS.Shapes(1).Width = 500
ActiveChart.ChartType = xlLineMarkers
ActiveChart.PlotArea.Select



ActiveChart.SetSourceData _
Source:=WS.Range("B5:B" & WS.Range("A1000").End(xlUp).row)


With ActiveChart
    .HasTitle = True
    .Axes(xlCategory, xlPrimary).HasTitle = True
    .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Protocol ID"
    .Axes(xlValue, xlPrimary).HasTitle = True
    .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Acuity Score"

    .SeriesCollection(1).Name = "Acuity Score"
    .SeriesCollection(1).XValues = WS.Range("A5:A" & WS.Range("A1000").End(xlUp).row)
    .SeriesCollection(1) _
        .Trendlines.Add Type:=xlLinear, Name:="Average Acuity"
End With

Chart2:
'Worksheets("Additional Charts").Shapes(1).Delete



    With Charts.Add.Location(Where:=xlLocationAsNewSheet, Name:="Acuity vs. Tenure - " & Target)
        .ChartType = xlXYScatter
        .SetSourceData WS.Range("B5:B" & WS.Range("A1000").End(xlUp).row)
        .HasTitle = True
        .ChartTitle.Text = "Acuity vs. Tenure"

        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Text = "Acuity Score"

        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Text = "Tenure (in years)"

        .SeriesCollection(1).XValues = WS.Range("E5:E" & WS.Range("A1000").End(xlUp).row)
        .SeriesCollection(1).Name = "Acuity Scores"
        .SeriesCollection(1) _
            .Trendlines.Add Type:=xlLinear, Name:="Average Acuity"

        .ExportAsFixedFormat xlTypePDF, "C:\Desktop\AcuityVTenure.pdf"

    End With

图表是指与过滤后的数据位于同一工作表中的第一个图表。 Chart2指的是由于我上面提到的问题,我必须在第二张工作表上添加第二张图表。

如何在没有系列更换问题的情况下将它们放在同一张纸上?

1 个答案:

答案 0 :(得分:0)

这里有一些代码供您考虑。它使用对象变量cht来引用工作表上的形状。它还使用.refresh重新绘制工作表上的任何现有图表来表示新数据。

通过以这种方式使用对象变量,可以清楚地操作哪个对象。对第二张图表做同样的事情。

请注意,我怀疑你不需要使用代码来重新创建它们,但是一旦数据更新,就使用只刷新它们的代码!

String[]