Я отчаянно пытаюсь отформатировать диаграмму солнечных лучей через VBA. В зависимости от количества точек я хочу, чтобы столбцы использовали один из моих цветов от зеленого до красного.
Данные, на которых строятся диаграммы, указываются на другом листе, поэтому я форматирую диаграмму после активации листа диаграммы.
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'Only when correct sheet is opened
If Not Sh.Name = "Radar Chart" Then Exit Sub
'Do things to find out which data point number is at the core of each column -> coloring this point colors the whole column
...
'Color the sunburst
Dim chtObj As ChartObject, pts As Points
Set chtObj = Sh.ChartObjects(1)
With chtObj.Chart
' .ClearToMatchColorStyle -> Runtime error
' .ClearToMatchStyle -> Runtime error
' .ChartArea.ClearFormats -> Runtime error
Set pts = .SeriesCollection(1).Points
End With
'pts(1).ApplyDataLabels (xlDataLabelsShowNone) -> Runtime error
'pts(2).ClearFormats -> Runtime error
For i = LBound(arrData, 1) To UBound(arrData, 1)
'arrPairings contains the number of points in column i
'arrZuordnungErsterPoint contains information on which point column i starts
Select Case arrpairings(i, 2)
Case "5":
pts(arrZuordnungNameErsterPoint(i, 2)).Format.Fill.BackColor.RGB = RGB(68, 154, 54) 'dunkelgrün
Case "4":
pts(arrZuordnungNameErsterPoint(i, 2)).Format.Fill.BackColor.RGB = RGB(111, 200, 96) 'hellgrün
Case "3":
pts(arrZuordnungNameErsterPoint(i, 2)).Format.Fill.BackColor.RGB = RGB(255, 255, 0) 'gelb
Case "2":
pts(arrZuordnungNameErsterPoint(i, 2)).Format.Fill.BackColor.RGB = RGB(255, 127, 80) 'orange
Case "1":
pts(arrZuordnungNameErsterPoint(i, 2)).Format.Fill.BackColor.RGB = RGB(255, 0, 0) 'rot
End Select
pts(arrZuordnungNameErsterPoint(i, 2)).Format.Fill.Solid
chtObj.Chart.Refresh 'useless
Next i
End Sub
Теперь моя проблема: Все работает как часы, но только когда я вручную сбрасываю настройки диаграммы до ее шаблонных настроек. В противном случае он обновит высоту столбца (как это делает сама диаграмма), но не изменит цвет. Выглядит так:
Как я могу сбросить диаграмму до ее шаблона (например, когда вы щелкаете правой кнопкой мыши и делаете это вручную)? Все, что я пробовал, приводит к ошибке времени выполнения «не поддерживает это».
Есть ли какое-либо другое более многообещающее событие, которое я мог бы использовать? Может быть, диаграмма обновляется только после запуска события SheetActive? Я попробовал это, нажав кнопку на самом листе, но никаких улучшений.
Меня действительно смущает поведение такого рода диаграмм. Запись макросов практически бесполезна. Я также нашел очень мало документации по солнечным лучам, так что вы моя последняя надежда. Любая помощь приветствуется!