【问题标题】:Relative selction .Xvalues (Charts)相对选择 .Values(图表)
【发布时间】:2018-03-17 21:59:33
【问题描述】:

第一个:.XValues/.Values 的选择仅在我对单元格进行硬编码(我不想这样做)时才有效,而不是我这样做的方式。

第二次:每第二次运行代码,当我添加图表时已经有一些系列,所以我最终得到的系列比我想要的要多。

Sub AddChart()

Dim ch As Chart
Dim ws As Worksheet

Set ws = Sheets("Data")

Set ch = CHARTS.Add2   

With ch.SeriesCollection.NewSeries
    .Name = ws.Range("B1")
    .XValues = ws.Range("B18", Range("B18").End(xlDown))
    .Values = ws.Range("C18", Range("C18").End(xlDown))
End With   

End Sub

【问题讨论】:

  • 首先检查系列是否存在,如果不存在 .NewSeries 和 .XValues = myRange 变量而不是硬编码,因此您可以使用可以更改的范围变量
  • 您真正想要多少个系列,您真正想要实现什么?您是否尝试像在工作表中添加新数据一样更新单个系列?
  • @QHarr 我声明了Set xRange = ws.Range("B18", Range("B18").End(xlDown)),然后在.XValues = xRange 使用它并且它有效。我想用工作表构建图表。
  • 这对我来说仍然没有澄清......“从一张纸上构建”。不要说很难。在下面的回答中,我试图概述您可以使用的一些工具。如有任何问题,请与我联系,并edit 将有关您的任务的任何新信息放入问题中。

标签: vba excel


【解决方案1】:

考虑以下几点:

  1. 您正在添加图表工作表
  2. NewSeries 正在添加一个新系列
  3. 当你说你不想硬编码你是什么意思?您可以使用变量分配给现有系列。

我建议您将图表创建与图表更新分开

所以在下面我们有一个创建图表子来创建图表:

Option Explicit

Sub CreateChart()

Dim ch As Chart
Dim ws As Worksheet
Dim wb As Workbook

Set wb = ThisWorkbook
Set ws = wb.Worksheets("Data")
Set ch = Charts.Add2

With ch.SeriesCollection.NewSeries
    .Name = ws.Range("B1")
    .XValues = ws.Range("Xseries")
    .Values = ws.Range("Yseries")
End With

End Sub

然后我们有一个更新图表功能,可以与现有图表表一起使用。现在,根据您要如何更新 XValues 和 Values,您可以简单地传递一个范围变量作为新的赋值,例如

 ch.SeriesCollection(1).XValues = myRangeVariable

在我给您的情况下,您可以使用 2 个动态命名范围。这意味着每当您运行 update sub 时,源列中的任何新行都会被拾取并添加到图表中。

动态系列添加到名称管理器中,Ctrl + F3,其中一个用于X系列,一个用于Y:

X系列

=OFFSET(Data!$B$18,0,0,COUNT(Data!$B$18:$B$1048576),1)

Y系列

=OFFSET(Data!$C$18,0,0,COUNT(Data!$C$18:$C$1048576),1)

名称管理器中的动态系列

更新图表的代码(可以与按钮相关联)

Sub UpdateChart()

    Dim ch As Chart
    Dim wb As Workbook
    Dim ws As Worksheet

    Set wb = ThisWorkbook
    Set ws = wb.Worksheets("Data")
    Set ch = wb.Charts("Chart1") 'change as appropriate

    ch.SeriesCollection(1).XValues = ws.Range("Xseries")
    ch.SeriesCollection(1).Values = ws.Range("Yseries")

End Sub

现在,如果您只是关心有一个图表来获取新添加的数据行,您可以跳过 VBA,直接将动态系列与图表一起使用

您将编辑现有的图表系列并为 Y 值放置

=Book1!Yseries

对于 X 值放

=Book1!Xseries

Book1 被替换为您的工作簿名称。

【讨论】:

    猜你喜欢
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2016-01-16
    相关资源
    最近更新 更多