将图表添加到更改数据表

时间:2015-04-04 20:45:56

标签: excel-vba vba excel

现在我有一个代码可以创建一个新的工作表和表,并将所有收集的数据添加到表中。我想在表格的底部也有一张图表。我使用记录宏来获取编码的基础知识来添加表,问题是数据是不断变化的。列和行根据当天收集的数据量进行扩展和提取。

如何对其进行编码,以便收集的数据也会扩展图表:ActiveChart.SetSourceData Source:=Range("B8:AG8")和此处:ActiveChart.FullSeriesCollection(1).XValues = "='Master log'!$B$2:$AG$2"。范围需要能够根据表格数据进行扩展或缩小。

我希望这是有道理的。谢谢!

到目前为止我编写的内容:

intLastCol = Cells(1, 1).End(xlToRight).Column
intLastRow = Cells(1, 1).End(xlDown).Row

    ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
    ActiveSheet.Shapes("Chart 4").IncrementLeft -26.25
    ActiveSheet.Shapes("Chart 4").IncrementTop 80.25
    ActiveChart.SetSourceData Source:=ListObjects("Stats").ListRows(1)
    ActiveChart.FullSeriesCollection(1).Name = "=""Continuing Total Stats"""
    ActiveChart.FullSeriesCollection(1).XValues = "='Master log'!" & ListObjects("Stats").ListRows(1).Address

1 个答案:

答案 0 :(得分:0)

如果是实际的,您可以在宏中使用ListObject。具体是ListRows Property
例如,你可以使用这样的东西:
ActiveChart.SetSourceData Source:=ListObjects("TableName").listRows(1)

ActiveChart.FullSeriesCollection(1).XValues = "='Master log'!" & ListObjects("TableName").listRows(1).address

您可能需要指定listobject所在的工作表。与sheets("SummarySheet").listobjects("TableName"). ...

一样

编辑1

没有表

假设左上角的大多数单元格是" A1"或换句话说cells(1,1)并且每次都填充标题,您可以使用它来确定最后一列并将其用作列索引。
intLastCol = cells(1,1).End(xlToRight).column

您可以使用以下行获取一行的范围:
set rngOneRowInRange = range(cells(1,1),cells(1,intLastCol))
注意:您可能(并且可能应该)根据您的情况更改行索引。您想在图表中使用哪一行...

使用表格

您可以使用ListObjects.Add Method。您必须使用不使用表格部分中描述的类似方法确定表格的整个范围(参数)。
要确定您可以使用的最后一行 intLastRow = cells(1,1).End(xlDown).row(这假设列中没有,也绝不会是空白单元格" A")

然后,您可以将我原来提出的解决方案与.listRows(1)

一起使用

编辑2

使用表格范围操作图表的语法如下所示:

Sub InsertChart()
    Dim shpMyChart As Shape
    Dim strRangeAddress As String

    Set shpMyChart = ActiveSheet.Shapes.AddChart(xlColumnClustered)
    strRangeAddress = Sheets("Master log").ListObjects("Stats").ListRows(1).Range.Address

    With shpMyChart
        .Name = "MyMacroChart"
        .Left = 300
        .Top = 150

        With .Chart
        .SetSourceData Source:=Range("'Master log'!" & strRangeAddress)
        .SeriesCollection(1).Name = "=""Continuing Total Stats"""
        .SeriesCollection(1).XValues = ("'Master log'!" & strRangeAddress) 'possibly a duplicate of SetSourceData, I'm not sure
        End With '.Chart

    End With 'shpMyChart

End Sub