Альтернативы, что я предпочитаю, чтобы манипулировать Формулу серии, это просто работать с индивидуальными свойствами SeriesCollection
.
Примечание Я пишу это из памяти/непроверенных, поэтому дайте мне знать, если с этим возникнут проблемы!
Внутри With
блока, вам нужно будет определить диапазоны использовать для Values
, XValues
, Name
и Order
, конечно, вы можете опустить детали, которые вам не нужны (например, мне редко нужно манипулировать серия .Order
)
Dim cht as Chart
Dim srs as Series '# Series variable'
Dim s as Long '# Series iterator'
Dim ws as Worksheet
Set ws = ActiveSheet
Set cht = ws.ChartObjects(1).Chart '## Modify as needed.'
For each srs in cht.SeriesCollection
With srs
s = s+1
.Values = ws.Range("Some_Range_For_Values")
.XValues = ws.Range("Range_For_XValues")
.Name = ws.Range("Range_For_SeriesName")
.Order = s
End With
Next
Практически говоря, здесь довольно простой пример. Я часто создаю или обновляю диаграмму динамически, используя такой подход. Предполагая, что XValues
находятся в колонке А, в то время как данные серий в колонках B: F, вы могли бы сделать что-то вроде:
Dim rngData as Range '# A range containing all of the series values & xValues'
Dim s as Long
Dim cht as Chart
Dim srs as Series
Dim ws as Worksheet
Set ws = ActiveSheet
Set cht = ws.ChartObjects(1).Chart
Set rngData = Range("A2:F10")
'## I like to remove existing series, and then add in the new data. '
For each srs in cht.SeriesCollection
srs.Delete
Next
'## Iterate over our range and add series back in to the chart.'
For s = 2 to rngData.Columns.Count
Set srs = cht.NewSeries
With srs
.XValues = rngData.Columns(1).Address
.Values = rngData.Columns(s).Address
'Name = rngData.Cells(1,s).Offset(-1,0).Value
'Order = s-1
End With
Next
У вас есть закрывающая скобка, но не открытие одного в формуле. Однако я не уверен, что это решит вашу проблему. Вы пытались записать макрос, чтобы увидеть, как система будет управлять этим изменением? – Gaffi