Excel 将图表添加到正在更改的数据表中

Excel 将图表添加到正在更改的数据表中,excel,vba,Excel,Vba,现在我有一个代码,它将创建一个新的工作表和表格,并将所有收集的数据添加到表格中。我还想在表格的底部有一张图表。我使用record宏获得了添加表的基本编码,问题是数据在不断变化。列和行根据当天收集的数据量展开和提取 如何对其进行编码,以便收集到的数据也在此处展开图表:ActiveChart.SetSourceData:=Range(“B8:AG8”)和这里:ActiveChart.FullSeriesCollection(1.XValues=“='Master log'!$B$2:$AG$2”。范

现在我有一个代码,它将创建一个新的工作表和表格,并将所有收集的数据添加到表格中。我还想在表格的底部有一张图表。我使用record宏获得了添加表的基本编码,问题是数据在不断变化。列和行根据当天收集的数据量展开和提取

如何对其进行编码,以便收集到的数据也在此处展开图表:
ActiveChart.SetSourceData:=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
如果它是可以在宏中使用的实际表。具体而言。
例如,您可以使用如下内容:
ActiveChart.SetSourceData:=ListObjects(“TableName”).listRows(1)


ActiveChart.FullSeriesCollection(1).XValues=“='Master log'!”&ListObjects(“TableName”).listRows(1).地址

您可能需要指定listobject所在的工作表。类似于
sheets(“SummarySheet”).listobjects(“TableName”)


编辑1 没有桌子 假设最左上角的单元格是“A1”,或者换句话说
单元格(1,1)
,并且每次都会填充标题,您可以使用它来确定最后一列并将其用作列索引。
intLastCol=单元格(1,1).End(xlToRight).column

您可以使用以下行获取一行的范围:
set rngOneRowInRange=range(单元格(1,1),单元格(1,intLastCol))

注意:您可以(也可能应该)根据自己的情况更改行索引。要在图表中使用的行

带桌子 你可以用。您必须使用类似的方法来确定表格的整个范围(源参数),如无表格部分所述。
要确定可以使用的最后一行
intLastRow=单元格(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

根据您对数据的控制类型,您可以为工作表中的单元格定义命名范围,然后将图表源设置为命名范围。我拥有完全控制权。定义命名范围是什么意思?根据数据量和类型,每次调用宏时,范围都会发生变化。当范围发生变化时,我可以创建一个已定义的命名范围吗?我该怎么做?哦,不,你是对的,它实际上不是一个命名表,因为数据每次都被创建,并且只是输入单元格范围,看起来像一个表,但它不是一个实际创建的表。有什么解决办法吗?有解决办法。Alt1您可以使用VBA将范围转换为表格。Alt2您可以使用
.End
或者
.Resize
.Offset
获得没有表格的范围。我认为第一个选项是最好的。如何将范围转换为表格?@Lilly在我的回答中看到了“编辑1和使用表格”部分。我正试图按照您给我的建议编译代码,但我收到一个错误,说子或函数未定义,它突出显示了
。ListObjects
我不确定我做错了什么。这是我在问题中编辑的内容。