【问题标题】:Format slice of Excel pie chart based on Horizontal category axis基于水平类别轴的Excel饼图格式切片
【发布时间】:2013-07-07 18:14:52
【问题描述】:

我正在寻找一种基于水平类别轴的值来格式化饼图中切片颜色的方法。

例如,我有一个带有以下数据标签的饼图(来自类别轴标签):

  • 苹果
  • 香蕉
  • 橙子
  • 葡萄

每种水果的总和为 100%。

在饼图中,代表苹果的切片始终为绿色。香蕉总是黄色的,等等。每个月我都必须更新饼图,每个月苹果、香蕉、橙子和葡萄的值都会发生变化。但是,切片颜色不会改变。

我的问题是 - 有没有办法每月更新饼图并保持与每种水果相关的颜色?还要记住,有些月份可能会有额外的水果,有些月份可能会省略一些水果。

我尝试根据每个切片的Points(x) 值更改它,但是由于系列的数量可能每个月都在变化,所以它不起作用。正如您从下面看到的,我已经设法根据每个切片的 Points(x) 值对其进行更改,但我想知道是否可以包含一个 IF 循环来表示类似...IF category axis = "Apples", Selection.Format.Fill ... (fill slice with RGB(X, X, X)) 等的内容。

Sub test()

    ActiveChart.SeriesCollection(1).Select
    ActiveChart.SeriesCollection(1).Points(2).Select
    With Selection.Format.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 144, 44)
        .Transparency = 0
        .Solid
    End With
    ActiveChart.SeriesCollection(1).Points(3).Select
    With Selection.Format.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(112, 48, 30)
        .Transparency = 0
        .Solid
    End With
        ActiveChart.SeriesCollection(1).Points(6).Select
    With Selection.Format.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(112, 48, 160)
        .Transparency = 0
        .Solid
    End With
End Sub

如果有人能提供帮助,我将不胜感激。

【问题讨论】:

  • 发布您尝试过但不起作用的代码 - 对我们来说,修复现有代码比从头开始重新创建整个代码更容易。

标签: excel vba format conditional-statements pie-chart


【解决方案1】:

这样的东西应该可以工作

Sub Tester()

    Dim cht As Chart, pts As Points
    Dim sc As Series
    Dim x As Integer
    Dim sliceName As String, clr As Long

    Set cht = ActiveSheet.ChartObjects(1).Chart
    Set sc = cht.SeriesCollection(1)
    Set pts = sc.Points

    'loop through all the points
    For x = 1 To pts.Count

        sliceName = sc.XValues(x)

        Select Case sliceName
            'assign a specific color...
            Case "A": clr = vbYellow 'RGB(255,255,0)
            Case "B": clr = vbGreen  'RGB(0,255,0)
            Case "C": clr = vbRed    'RGB(255,0,0)
            Case Else: clr = -1 '...or do nothing
        End Select

        If clr <> -1 Then
            With pts(x).Format.Fill
                .ForeColor.RGB = clr
                .Transparency = 0
                .Solid
            End With
        End If

    Next x

End Sub

【讨论】:

    猜你喜欢
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多