VBA - изменение значений XV с переменными - PullRequest
0 голосов
/ 15 мая 2018

Я совершенно новичок в области программирования и начинаю изучать VBA для моделирования финансовых сценариев в Excel.Теперь у меня есть вопрос, касающийся изменения XV-значений диаграммы, чтобы изменить даты, представленные мне для данного набора данных.

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

Мой код:

Sheets("Result").ChartObjects("Chart 2").Activate
ActiveChart.FullSeriesCollection(1).XValues = ActiveWorkbook.Sheets("Data_Portfolio").Range(Cells(RangeStart, 1), Cells(RangeStop, 1))

Было бы очень любезно объяснить мне, что не так со второй строкой и как я могу решить "ошибка приложения или объекта ".

Заранее благодарю всех,

Ник

1 Ответ

0 голосов
/ 15 мая 2018

1) Полностью квалифицируйте Cells с именем листа

 ActiveChart.FullSeriesCollection(1).XValues = ActiveWorkbook.Sheets("Data_Portfolio").Range(ActiveWorkbook.Sheets("Data_Portfolio").Cells(RangeStart, 1), ActiveWorkbook.Sheets("Data_Portfolio").Cells(RangeStop, 1)) 

2) Также следует убедиться, что существует ряд (1) для добавления, и для некоторых версий лучше использовать SeriesCollection вместо FullSeriesCollection.

3) Используйте Long вместо Integer, чтобы избежать потенциального переполнения.

Пример ниже:

Option Explicit

Public Sub test()

    Dim RangeStart As Long
    Dim RangeStop As Long

    RangeStart = 1
    RangeStop = 5
    Dim ws As Worksheet
    Set ws = ActiveWorkbook.Worksheets("Data_Portfolio")

    Worksheets("Result").ChartObjects("Chart 2").Activate '<== Is this ActiveWorkbook or ThisWorkbook?
    ActiveChart.SeriesCollection.NewSeries '<=  added for demo only to ensure present
    ActiveChart.SeriesCollection(1).XValues = ws.Range(ws.Cells(RangeStart, 1), ws.Cells(RangeStop, 1)) '< x
    ActiveChart.SeriesCollection(1).Values = ws.Range(ws.Cells(RangeStart, 1), ws.Cells(RangeStop, 1)) ' < y copied for test purposes only
End Sub
...