2015-07-08 1 views
0

У меня есть рабочая книга, чем создается диаграмма «на лету» в зависимости от выбранного листа, который является источником данных. Две серии - линии, две из которых - гистограммы со значениями выше и ниже одной из линейных рядов.Изменение цветов по умолчанию в Excel 2010 Диаграмма

Я хотел бы, чтобы цвета положительных значений гистограммы были зелеными, а отрицательные значения - красными. Независимо от того, сколько вариантов я попытался, когда диаграммы сгенерированы, они по умолчанию соответствуют стандартным цветам (сгоревшие оранжевые и синие синие.)

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

Мой код:

ActiveSheet.Shapes.AddChart.Select 
Application.ActiveChart.Parent.Name = "Chart1" 
ActiveSheet.ChartObjects("Chart1").Activate 
ActiveChart.PlotVisibleOnly = False 

ActiveChart.Axes(xlValue).Select 
ActiveChart.Axes(xlValue).MinimumScale = ValueMin - 0.1 
ActiveChart.Axes(xlValue).MaximumScale = ValueMax + 0.1  

ActiveChart.SeriesCollection(1).Select     'Negative Series 
ActiveChart.SeriesCollection(1).ChartType = xlColumnClustered 
With Selection.Format.Fill 
    .Visible = msoTrue 
    .ForeColor.RGB = RGB(255, 0, 0)      'Red 
    .Transparency = 0 
    .Solid 
End With 

ActiveChart.SeriesCollection(2).Select     'Positive Series 
ActiveChart.SeriesCollection(2).ChartType = xlColumnClustered 
With Selection.Format.Fill 
    .Visible = msoTrue 
    .ForeColor.RGB = RGB(0, 176, 80)      'Green 
    .Transparency = 0 
    .Solid 
End With 

ActiveChart.SeriesCollection("3").Select 
With Selection.Format.Line 
    .Visible = msoTrue 
    .ForeColor.RGB = RGB(255, 255, 0)        'Yellow 
    .Transparency = 0 
End With 
ActiveChart.SeriesCollection(4).Select        'Signal 
With Selection.Format.Line 
    .Visible = msoTrue 
    .ForeColor.RGB = RGB(255, 51, 204)        'Pink 
    .Transparency = 0 
End With 

Любые идеи, как бить цвета по умолчанию и использовать те выбранные? Спасибо.

+0

Вам необходимо будет проверить, какие строки данных приводят к положительному значению, а затем применить к ним графики на основе этого. Я предвижу цикл в генерации кода диаграммы. – bonCodigo

+0

Спасибо, но данные в каждой серии либо все положительные, либо все отрицательные с самого начала. Результатом построения диаграммы является создание гистограммы. Я хочу, чтобы область над линией была зеленой, а под ней - красной. Проверка данных не приведет к такому же результату. Я обновил код выше, чтобы показать более подходящее создание диаграммы, если это поможет. – parodytx

ответ

0

Я немного ленив, чтобы написать этот код. Поэтому вам предоставляется псевдокод (непроверенный). Вы можете протестировать и использовать его по своему усмотрению ... Запустите этот код сразу после генерации ваших диаграмм. Пользователь не заметит изменений на бэкэнд - если вы отключите обновление экрана в начале и включите его в конце. Я не вижу код генерации диаграммы. Поэтому я написал один, чтобы сделать после поколения на основе вашего вопроса.

Option Explicit 

Public Sub ColureMePlusMinus() 
Dim ws as Worksheet 
Dim cht as ChartObject 
Dim srs as Series 
Dim i as Integer 
Dim pcRed as Integer 'if you intend to use RGB, use Long 
Dim ncGreen as Integer 

'--change as per your own sheet 
Set ws = ActiveWorkbook.Sheets("Sheet1") 

pcRed = 4 
ncGreen = 3 

For Each cht In ws.ChartObjects 
    For Each srs In cht.Chart.SeriesCollection 
     With srs.Fill 
     .Solid 
     '--do the honours 
     End With 
    Next 
Next 

End Sub 

цвет кредиты peltier.


UPDATE

Обновление в соответствии с комментарием OP в:

Changing Excel workbook's colour theme and How to change the default colors that Excel uses for chart series.

+0

Я отредактировал мой код выше, чтобы показать большую часть соответствующего кода, включая создание диаграммы. Прошу прощения, но помимо использования переменных и циклов по всем сериям (не то, что мне нужно), я не вижу, где ваше предложение отличается от моего существующего кода. Не могли бы вы объяснить, пожалуйста? – parodytx

+0

'1.'У вас нет кода генерации диаграммы там в вашем исходном сообщении. '2. Эффективность, которую я предоставлял быстрее, чем у вас, и это способ опереться (например, если у вас есть коллекции 100 серий, вы будете писать строки кода n-номера в соответствии с вашим * стилем *). '3'. Вопрос в вашем оригинальном посте был (до сих пор): «Идеи, как бить цвета по умолчанию и использовать выбранные», - ответил я. '4.' Добавьте разделительную линию и укажите слово * UPDATE * в своем сообщении, а затем добавьте код генерации диаграммы, если он у вас есть. Я обновляю свой ответ другим решением. Вы можете попробовать это. – bonCodigo

0

Иногда самые трудные решения, чтобы выяснить, является самым обычным.

линии

ActiveChart.SeriesCollection(2).Select    
ActiveChart.SeriesCollection(2).ChartType = xlColumnClustered 
With Selection.Format.Fill 
...etc 

Должен быть переключена на:

ActiveChart.SeriesCollection(2).ChartType = xlColumnClustered 
ActiveChart.SeriesCollection(2).Select    
With Selection.Format.Fill 
...etc 

Так что Format.Fill действует на имущество SeriesCollection, а не собственность ChartType. Doh!

Работает как очарование.

Смежные вопросы