excel - 在Excel VBA中更改饼图的切片颜色

标签 excel charts pie-chart vba

最初我编写了一个函数,根据预定义的颜色主题更改一系列饼图的外观

    Function GetColorScheme(i As Long) As String
Const thmColor1 As String = "C:\Program Files\Microsoft Office\Document Themes 14\Theme Colors\Blue Green.xml"
Const thmColor2 As String = "C:\Program Files\Microsoft Office\Document Themes 14\Theme Colors\Orange Red.xml"
    Select Case i Mod 2
        Case 0
            GetColorScheme = thmColor1
        Case 1
            GetColorScheme = thmColor2
    End Select
End Function

但是,路径不是恒定的,我想通过 rgb 颜色单独定义每个饼图切片。 我在 stackoverflow 上的上一个主题 ( How to use VBA to colour pie chart ) 中找到了一种更改饼图每个切片颜色的方法

但我不知道如何将代码实现到上面提到的函数中。我可以写吗

    Function GetColorScheme(i As Long) As String

    Select Case i Mod 2
        Case 0
            Dim clr As Long, x As Long

For x = 1 To 3
    clr = RGB(0, x * 8, 0)
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Points(x)
        .Format.Fill.ForeColor.RGB = clr
    End With
Next x
        Case 1
            Dim clr As Long, x As Long

For x = 1 To 3
    clr = RGB(0, x * 8, 0)
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Points(x)
        .Format.Fill.ForeColor.RGB = clr
    End With
Next x
    End Select
End Function

该函数链接到脚本的主要部分(即)

For Each rngRow In Range("PieChartValues").Rows
chtMarker.SeriesCollection(1).Values = rngRow
ThisWorkbook.Theme.ThemeColorScheme.Load GetColorScheme(thmColor)
chtMarker.Parent.CopyPicture xlScreen, xlPicture
lngPointIndex = lngPointIndex + 1
chtMain.SeriesCollection(1).Points(lngPointIndex).Paste
thmColor = thmColor + 1

所在行

 ThisWorkbook.Theme.ThemeColorScheme.Load GetColorScheme(thmColor) 

获取函数的值(请参阅代码的第一部分 - 原始函数),但现在我不再定义 thmColor 变量,并且不知道如何最好地将代码实现到函数部分中

最佳答案

类似这样的东西(您需要调整颜色以满足您的需要)

http://www.rapidtables.com/web/color/RGB_Color.htm

Sub ApplyColorScheme(cht As Chart, i As Long)

    Dim arrColors

    Select Case i Mod 2
        Case 0
            arrColors = Array(RGB(50, 50, 50), _
                              RGB(100, 100, 100), _
                              RGB(200, 200, 200))
        Case 1
            arrColors = Array(RGB(150, 50, 50), _
                              RGB(150, 100, 100), _
                              RGB(250, 200, 200))
    End Select

    With cht.SeriesCollection(1)
        .Points(1).Format.Fill.ForeColor.RGB = arrColors(0)
        .Points(2).Format.Fill.ForeColor.RGB = arrColors(1)
        .Points(3).Format.Fill.ForeColor.RGB = arrColors(2)
    End With

End Sub

使用示例:

chtMarker.SeriesCollection(1).Values = rngRow
ApplyColorScheme chtMarker, thmColor
chtMarker.Parent.CopyPicture xlScreen, xlPicture

关于excel - 在Excel VBA中更改饼图的切片颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17387926/

相关文章:

excel - 如何使用数据透视表为每个子类别创建一行

excel - 使用 `union` 和(For Each 循环)而不使用数组

vba - Excel中的WORKDAY函数不接受Holiday参数范围的联合

java - 使用 POI 读取一系列 Excel 工作表数据

c# - 在 WinForms 中更新雷达图

javascript - 如何使用 highcharts 绘制堆积柱形图?

r - 饼图 highcharter R

c# - 从 C# 中的 asp.net MVC Controller 将 JSON 数据发送到 highcharts pie

excel - 可以在动态(溢出)范围上执行 sumif(s)并返回(2d)数组吗?

graph - 核心图 : CPTPieChart change position inside CPTGraphHostingView?