Создание диапазона в пределах диапазона данных - PullRequest
0 голосов
/ 29 мая 2019

У меня есть подпрограмма, которая обновляет график с сериями на основе таблицы.Тем не менее, первая строка таблицы пуста, и я хочу опустить это из моей коллекции серии.Я думал о создании диапазона в пределах своего диапазона базы данных и использовал его.Вот мой код:

Sub UpdateGraph()

Dim rng_pf As Variant, rng_bm As Variant, rng_date As Variant,
Dim lr as integer

' Defining ranges
With ThisWorkbook.Sheets("Time series")
         lr = .ListObjects(1).ListColumns(1).Range.Rows.Count + 6 ' This corresponds to the last row in my table
         rng_pf = .ListObjects(1).ListColumns("PF").DataBodyRange(2, lr) ' <-- This doesnt work
         rng_bm = .ListObjects(1).ListColumns("BM").DataBodyRange(2, lr)
         rng_date = .ListObjects(1).ListColumns("Date").DataBodyRange(2, lr)
End With

' Updating chart
With Sheets(1).ChartObjects("Chart 1").Chart
    .FullSeriesCollection(1).Values = rng_pf
    .FullSeriesCollection(2).Values = rng_bm
    .FullSeriesCollection(1).XValues = rng_date
    .FullSeriesCollection(2).XValues = rng_date
End With

End sub

Я думал о создании массива, основанного на диапазоне данных, а затем об удалении первого элемента массива, но это кажется излишним.При запуске моего кода я получаю, что rng_pf Empty.Мой стол: enter image description here

1 Ответ

1 голос
/ 29 мая 2019

Вы должны определить диапазоны немного лучше, но в то же время попробовать?

Sub UpdateGraph()

Dim rng_pf As Range, rng_bm As Range, rng_date As Range

' Defining ranges
With ThisWorkbook.Sheets("Time series")
        With .ListObjects(1)
            With .ListColumns("PF")
                Set rng_pf = .DataBodyRange.Offset(1, 0).Resize(.DataBodyRange.Rows.Count - 1, 1)
            End With
            With .ListColumns("BM")
                Set rng_bm = .DataBodyRange.Offset(1, 0).Resize(.DataBodyRange.Rows.Count - 1, 1)
            End With
            With .ListColumns("Date")
                Set rng_date = .DataBodyRange.Offset(1, 0).Resize(.DataBodyRange.Rows.Count - 1, 1)
            End With
        End With
End With

' Updating chart
With Sheets(1).ChartObjects("Chart 1").Chart
    .FullSeriesCollection(1).Values = rng_pf
    .FullSeriesCollection(2).Values = rng_bm
    .FullSeriesCollection(1).XValues = rng_date
    .FullSeriesCollection(2).XValues = rng_date
End With

End Sub
```vba

**EDIT:** minor code cleanup as per OP suggestion.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...