Как условно отформатировать графический объект Excel SmartArt - PullRequest
0 голосов
/ 08 июня 2018

Я работаю над проектом в Excel 2016, и нужно сделать диаграмму (предпочтительно круг), которая меняет цвет каждого «среза» на основе оценки.Оценка представляет собой целое число, которое берется из таблицы Excel, поэтому оно будет меняться в зависимости от результатов опроса.

Результаты идут с 1 по 5, где 1 - красный, а 5 - зеленый.Я знаю, как условно отформатировать саму ячейку, чтобы она соответствовала нужному мне цвету, но я не знаю, как это сделать на графике.

Я посмотрел на VBA (через видео на YouTube), но я не могу заставить это работать.

Вот код, который у меня есть для VBA, если кто-нибудь может мне помочь или сообщить, как это вообще сделать, это было бы здорово!

Private Sub SheetActivate(ByVal Sh As Object)

Dim cht As ChartObject
Dim i As Integer
Dim vntValues As Variant
Dim s As String

Dim mySeries As Series

For Each cht In ActiveSheet.ChartObjects
    For Each mySeries In cht.Chart.SeriesCollection
        If mySeries.ChartType <> xlPie Then GoTo SkipNotPie

        s = Split(mySeries.Formula, ",")(2)
        vntValues = mySeries.Values

        For i = 1 To UBound(vntValues)
            mySeries.Points(i).Interior.Color = Range(s).Cells(i).Interiror.Color
        Next i

SkipNotPie:
    Next mySeries
Next cht

End Sub

1 Ответ

0 голосов
/ 08 июня 2018

Вы допустили опечатку

Range (s) .Cells (i) .Interiror.Color

и переменная подпроцедуры не используется в вашем коде.

Sub test()
    SheetActivate Activesheet '<~~ This will execute the following procedure.

End Sub

Private Sub SheetActivate(ByVal Sh As Object)

Dim cht As ChartObject
Dim i As Integer
Dim vntValues As Variant
Dim s As String

Dim mySeries As Series

For Each cht In Sh.ChartObjects
    For Each mySeries In cht.Chart.SeriesCollection
        If mySeries.ChartType <> xlPie Then GoTo SkipNotPie

        s = Split(mySeries.Formula, ",")(2)
        vntValues = mySeries.Values

        For i = 1 To UBound(vntValues)
            mySeries.Points(i).Interior.Color = Range(s).Cells(i).Interior.Color
        Next i

SkipNotPie:
    Next mySeries
Next cht

End Sub

enter image description here

Если цвет вашей ячейки условно отформатирован, измените его следующим образом

For i = 1 To UBound(vntValues)
    'mySeries.Points(i).Interior.Color = Range(s).Cells(i).Interior.Color
    mySeries.Points(i).Interior.Color = Range(s).Cells(i).FormatConditions(1).Interior.Color
Next i
...