Изменение источника данных диаграммы через макрос (вба)

Автор sergo44441, 29.02.2012, 22:44

« назад - далее »

sergo44441

Доброго вечера, уважаемые знатоки. Подскажите, пожалуйста, по созданию отчета, у меня из сводной таблицы данные вытягиваются формулами, чтобы на одном графике показывать  общий итог и динамику составляющих. При добавлении новых данных в сводной увеличивается количество столбцов. Я настроил в макросе копирование формул, теперь нужно программно изменить источники данных у диаграмм. Их в отчете довольно много, нужно сделать через коллекцию for each , в этом обращусь за подсказкой знатоков.
Не торопись, и все успеешь намного быстрее

kuklp

Как-то так, с циклом:
Sub www1()
   Dim i&, c&
   c = [свод!A10].End(xlToRight).Column
   ActiveSheet.ChartObjects("Диаграмма 1").Activate
   For i = 1 To ActiveChart.SeriesCollection.Count
       ActiveChart.SeriesCollection(i).Formula = "=SERIES(свод!R" & i + 10 & "C1,,свод!R" & i + 10 & "C2:R" & i + 10 & "C" & c & ",1)"
   Next
End Sub

или без:
Sub www2()
   ActiveSheet.ChartObjects("Диаграмма 1").Activate
   ActiveChart.SetSourceData Range("A11", Cells(13, [A10].End(xlToRight).Column))
End Sub

Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

sergo44441

Спасибо за идею, мне не совсем подходит, поскольку в отчете диаграмм много. Получилось с таким кодом
Sub обновление_диаграмм()
Dim iz As Worksheet
Dim cht As ChartObject
For Each iz In Worksheets
For Each cht In iz.ChartObjects
    k = cht.Chart.SeriesCollection(1).Formula
    t = Mid(k, InStr(1, k, "(") + 1, InStr(1, k, ",") - InStr(1, k, "(") - 1)
    t1 = Left(t, InStr(InStr(1, t, "$") + 1, t, "$"))
    t2 = Right(t, Len(t) - Len(t1)) * 1 - 1
    diap1 = t1 & t2
    k1 = iz.Range(diap1).Value
    x = iz.Range(diap1).CurrentRegion.Rows.Count
    y = iz.Range(diap1).CurrentRegion.Columns.Count
    a = iz.Range(diap1).Offset(x - 1, y - 1).Value
    cht.Chart.SetSourceData iz.Range(iz.Range(diap1), iz.Range(diap1).Offset(x - 1, y - 1))
    Next
Next
End Sub
Не торопись, и все успеешь намного быстрее