相对选择.Xvalues(图表)

时间:2018-03-17 21:59:33

标签: vba excel-vba excel

1st:.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

1 个答案:

答案 0 :(得分:0)

考虑一些事情:

  1. 您正在添加图表表
  2. NewSeries正在添加新系列
  3. 当你说你不想硬编码是什么意思?您可以使用变量分配给现有系列。
  4. 我建议您将图表创建与图表更新分开

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

    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:

    XSERIES

    =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)
    

    名称管理器中的动态系列

    Dynamic series in name manager

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

    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将替换为您的工作簿名称。