【问题标题】:Format a PivotChart data label based on the x axis基于 x 轴格式化数据透视图数据标签
【发布时间】:2016-02-28 21:10:37
【问题描述】:

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

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

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

我的图表示例:

在我的研究中,我能够找到并修改一些使所有数据标签变为红色的代码,但我对使用 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

【问题讨论】:

  • 对于初学者,我会将vbYellow 更改为vbRed,将vbRed 更改为vbBlack。否则,代码 not 会为您做什么您期望它做的事情?
  • 我建议在学习 VBA 时掌握对象类型和引用,而不是所有 .selectparent.parent 编码。您可以使用点并遍历,但如果您需要经常操作某些对象,那么很好地引用它可以 i) 简化您的调试,ii) 简化您的代码编写,iii) 提高您对对象模型的了解,以及 iv) 获得智能感知为您提供对象的可用方法和属性...
  • @MacroMarc 感谢您的建议,您知道我可以使用哪些特定材料来了解有关 VBA 中对象的更多信息吗?
  • MSDN 有时没有很好的解释,例子很奇怪,但它是最完整的参考(因为VBA是MS语言)。一旦您了解 Excel 对象中的一般情况,Intellisense 会非常有用

标签: excel vba charts


【解决方案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 文本设置为红色。你也可以玩弄其他属性

【讨论】:

  • 谢谢!这很有帮助;我一定会更多地了解如何在 VBA 中抓取和操作对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-24
  • 1970-01-01
相关资源
最近更新 更多