Как программно изменить цвет линии для ряда на диаграмме в Excel 2007

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

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

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
2
0
16 563
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Спасибо, я этого не осознавал. Я это проверю.

geometrikal 14.11.2008 09:02
Ответ принят как подходящий

Раскрасить линию диаграммы в 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

Спасибо, не могли бы вы очень кратко описать, что это делает? Что должно быть в «плохом» диапазоне?

geometrikal 15.11.2008 02:17

Плохой диапазон в образце содержал список значений, которые можно сопоставить с каждым значением в серии. Ваша настройка, вероятно, отличается, но у меня нет достаточной информации.

Fionnuala 15.11.2008 04:31

Спасибо за описание. Настройка, к которой я стремлюсь, немного отличается - я хочу построить один диапазон, назовите его «rangeValues», но я хочу, чтобы цвет линии изменился со значением в другом диапазоне «rangeError». По сути, разноцветная серия. :)

geometrikal 16.11.2008 02:38

Другие вопросы по теме