Как установить диапазон данных таблицы для использования с диаграммой - PullRequest
0 голосов
/ 10 октября 2018

Использование Excel 2010 Я пытаюсь создать диаграмму на Листе1, используя частичные данные из нескольких разных таблиц.В приведенном ниже примере я просто пытаюсь получить данные из одной таблицы в качестве начала.Кажется, мне трудно установить диапазон этих данных в этой таблице.

В конечном итоге я проведу по 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

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

Попробуйте это.

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
0 голосов
/ 11 октября 2018

Я сделал некоторые изменения в моем коде.Я просто хотел бы, чтобы был способ ссылаться на таблицу без необходимости активировать лист, на котором находится таблица в первую очередь.Примечание. Диаграмма и таблицы не находятся на одном листе.

Это то, что в итоге работало для одного диапазона:

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
0 голосов
/ 11 октября 2018

Я предполагаю, что приведенный выше код вызывает ошибку «Требуется объект».Я бы рекомендовал разбить оператор (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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...