根据x轴格式化数据透视图数据标签

时间:2015-11-25 22:14:36

标签: excel vba charts

如果X轴恰好是某个标签,我试图找到一种方法(如果可能的话)将数据标签的文本颜色更改为红色。

我遇到的问题是我的图表是动态的(每天通过PowerPivot刷新,并且日期和其他切片器可以更改图表中显示的数据),所以即使我将数据标签着色为红色,也可以使用图表刷新后,它恢复原来的黑色字体。

例如,在下图中,我有一个图表,它按照已打开的天数跟踪票证;目标是在45天内解决所有门票;因此,当图表显示“45+”部分中的任何数据时,我希望该数据标签的字体为红色。

我的图表示例:

Sample of my chart:

在我的研究中,我能够找到并修改一些使所有数据标签变红的代码,但我对使用VBA操作图表非常陌生,并希望得到一些帮助。我到目前为止的代码:

Sub ChrtTest()
Dim i As Long

Sheets("Dashboard").Select
ActiveSheet.ChartObjects("DB_Chrt_1").Activate
ActiveChart.PlotArea.Select

With ActiveChart
    For i = 1 To .SeriesCollection.Count
        With .SeriesCollection(i).Format.Fill
            Select Case .Parent.Parent.Name
                Case "45+"
                    .Visible = msoTrue
                    With .Parent.Parent
                        .ApplyDataLabels
                        With .DataLabels
                            .Position = xlLabelPositionOutsideEnd
                            .Font.Color = vbYellow
                        End With
                    End With
                Case Else
                    .Visible = msoTrue
                    With .Parent.Parent
                        .ApplyDataLabels
                        With .DataLabels
                            .Position = xlLabelPositionOutsideEnd
                            .Font.Color = vbRed
                        End With
                    End With
             End Select
        End With
        Next i
      End With

End Sub

1 个答案:

答案 0 :(得分:1)

一些代码可以帮助您入门:

Sub template()

    Dim pc As Chart
    Set pc = Sheets("Dashboard").ChartObjects("DB_Chrt_1").Chart

    Dim ax As Axis
    Set ax = pc.Axes(xlCategory)

    Dim dSet As Series
    Set dSet = pc.SeriesCollection(1)

    Dim dPoints As Points
    Set dPoints = dSet.Points

    pc.ApplyDataLabels

    For i = 1 To dPoints.Count
        If ax.CategoryNames(i) = "45+" Then
            With dPoints(i).DataLabel.Format.TextFrame2.TextRange.Characters
               .Font.Fill.ForeColor.RGB = RGB(255, 0, 0)
            End With
        End If
   Next i

End Sub

这应该将dataLabel文本设置为红色。您也可以使用其他属性