-1

使用 Excel 2010 我正在尝试使用来自几个不同表的部分数据在 Sheet1 上创建一个图表。在下面的示例中,我只是尝试从一个表中提取数据作为开始。我似乎很难在此表中设置此数据的范围。

我最终将遍历每个表大约 8 个不同长度的数据列,大约 21张桌子。所以任何自动化的帮助都会很棒

这是我目前所拥有的......

Sub createChart()
    Dim rng As Range
    Dim chrt As Object

    'Table is named BMS_01_01_Module_01 and the column Name I want data from is Cell 1 Voltage
    Set chrt = Sheet1.Shapes.AddChart2
    chrt.ChartArea.SetSourceData Source:=activesheetlistobjects("BMS_01_01_Module_01").ListColumns("Cell 1 Voltage").Range
    chrt.ChartArea.ChartType = x1Line
End Sub
4

3 回答 3

0

我假设上面的代码正在产生“需要对象”错误。我建议将语句 (ChartArea.SetSourceData) 拆分为多个步骤,这将使您能够更好地控制代码和灵活性。

要引用表格范围,只需创建一个 ListObject 变量和一个 Range 变量,其余部分将在下面通过示例进行说明。

Dim tbl As ListObject
Set tbl = ActiveSheet.ListObjects("BMS_01_01_Module_01")

如此使用,将能够非常轻松地引用表格的任何部分:

Dim rng As Range

'Reference the whole table, including headers:
Set rng = tbl.Range

'Reference just the table data (no headers):
Set rng = tbl.DataBodyRange

'Reference just the data in a single column:
Set rng = tbl.ListColumns("Cell 1 Voltage").DataBodyRange

'Reference the headers only
Set rng = tbl.HeaderRowRange

因此,您的代码应该类似于以下内容:

chrt.ChartArea.SetSourceData Source:=tbl.ListColumns("Cell 1 Voltage").DataBodyRange
于 2018-10-10T21:56:39.977 回答
0

尝试这个。

Sub createChart()
    Dim rng As Range
    Dim obj As ChartObject
    Dim chrt As Chart
    Dim Lst As ListObject
    Dim cm  As ListColumn
    Dim Ws As Worksheet

    Set Ws = ActiveSheet
    Set Lst = Ws.ListObjects("BMS_01_01_Module_01")
    Set cm = Lst.ListColumns("Cell 1 Voltage")
    'Set cm = Lst.ListColumns(1)
    Set rng = cm.DataBodyRange

    'Table is named BMS_01_01_Module_01 and the column Name I want data from is Cell 1 Voltage
    Set obj = Sheet1.ChartObjects.Add(200, 200, 400, 400)
    With obj.Chart
    'chrt.ChartArea.SetSourceData Source:=ActiveSheet.ListObjects("BMS_01_01_Module_01").ListColumns("Cell 1 Voltage").Range
        .SetSourceData Source:=rng
        .ChartType = xlLine
    End With
End Sub
于 2018-10-11T01:43:36.067 回答
0

我最终对我的代码进行了一些更改。我只是希望有一种方法可以引用表格,而不必先激活表格所在的表格。注意:图表和表格不在同一张纸上。

这最终适用于单个范围:

Sub createChart()
Dim rng As Range
Dim cht As Object
Dim Ws As Worksheet

Set cht = Sheet1.Shapes.addChart

Worksheets("BMS_01_Module_01").Activate
Set Ws = ActiveSheet

Ws.ListObjects("BMS_01_Module_01").ListColumns("Cell 1 Voltage").Range.Select
cht.Chart.SetSourceData Source:=Selection
cht.Chart.ChartType = xlLine


End Sub
于 2018-10-11T13:21:04.637 回答