Как программно изменить цвет линии для ряда в диаграмме в Excel 2007 - PullRequest
2 голосов
/ 14 ноября 2008

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

Это можно запрограммировать с помощью VBA, однако я понятия не имею, что делать. Кто-нибудь может дать мне несколько советов?

Ответы [ 2 ]

4 голосов
/ 14 ноября 2008

В VBA достаточно просто покрасить линию графика. Вот некоторые заметки.

Dim cht  As Chart
Dim sc As Series
Dim blnBad As Boolean
Dim j

j = 85 'RGB orange '
blnBad = False

'This is a chart called Chart 1, it would be possible '
'to use the charts collection '
Set cht = ActiveSheet.ChartObjects("Chart 1").Chart
'A chart is composed of series of data ... '
For Each sc In cht.SeriesCollection
    ' ... that you can iterate through to pick up '
    ' the individual data values, or a data range. '
    ' Values in this case. '
    For i = LBound(sc.Values) To UBound(sc.Values)
        ' That can be checked against another set of '
        ' values in the range Bad. '
        With ActiveSheet.Range("Bad")
            ' So, look for the value ... '
            Set c = .Find(sc.Values(i), lookat:=xlWhole, LookIn:=xlValues)
            ' and if it is found ... '
            If Not c Is Nothing Then
                ' ... then set the Bad flag '
                blnBad = True
            End If
        End With
    Next
    ' So, this range contains a Bad value '
    ' and we will colour it red ... '
    If blnBad Then
        sc.Border.Color = RGB(255, 0, 0)
        ' ... not forgetting the markers '
        sc.MarkerForegroundColor = RGB(255, 0, 0)
    Else
        ' Otherwise, use an increasingly yellow colour '
        sc.Border.Color = RGB(255, j, 0)
        sc.MarkerForegroundColor = RGB(255, j, 0)

        j = j + 30 ' getting more yellow
        ' Debug.Print j ' uncomment to see j in the immediate window '
    End If
    blnBad = False
Next
End Sub
1 голос
/ 14 ноября 2008

Вы заперты в VBA? Один из способов сделать это - открыть архив документов OOXML .xlsx (на самом деле это Zip-архив). Тогда у вас есть свободный доступ к данным XML, которые составляют сам документ. Это можно выполнить с помощью таблицы стилей XSL или любого другого сценария по вашему выбору, а затем повторно распаковать.

...