2013-04-30 9 views
3

У меня есть диаграмма на одном из моих листов, и мне нужно изменить серию в ней в коде. Проблема в том, что я продолжаю получать сообщение об ошибке 1004. Я осмотрелся и не могу найти причину. Вот код:Изменение серии в excel vba

Sheets("Charts").ChartObjects(1).Chart.SeriesCollection(1).Formula = "=G49:I" & dblResult & ")"

+0

У вас есть закрывающая скобка, но не открытие одного в формуле. Однако я не уверен, что это решит вашу проблему. Вы пытались записать макрос, чтобы увидеть, как система будет управлять этим изменением? – Gaffi

ответ

8

Вы пытаетесь это?

Sheets("Charts").ChartObjects(1).Chart.SeriesCollection(1).Formula = _ 
"=SERIES(,," & "Charts!G49:I" & dblResult & ",1)" 
+1

+1 Я сам туда попал ... :-) @ user2337549, я использовал это, чтобы найти правильный формат: 'Debug.Print Sheets (« Charts »). ChartObjects (1) .Chart.SeriesCollection (1) .Formula ' – Gaffi

+0

Спасибо, ребята, это было именно то, что я искал – user2337549

+1

Это должно сработать. Мне проще просто назначить 'SeriesCollection (1) .Values',' .XValues' и т. Д., Хотя. Никогда не нравилась формула «Серии» :) Каждому свое! –

4

Альтернативы, что я предпочитаю, чтобы манипулировать Формулу серии, это просто работать с индивидуальными свойствами 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 
Смежные вопросы