Excel VBA更改数据透视表中的系列颜色

时间:2013-12-06 14:50:48

标签: excel vba excel-vba

这是一个非常简单的愚蠢问题之一,但我无法弄清楚什么是错的,而且我在互联网上发现的一切都没有用。

我只想在更改数据透视表中的过滤器后,在数据透视表中重新着色系列行。这是我尝试过的:

ThisWorkbook.Charts(ChartName).SeriesCollection(SeriesName) _
Format.Line.ForeColor = RGB(75, 172, 198)

该代码给出了“下标超出范围”错误。我也尝试过:

Sheets(SheetName).ChartObjects(ChartName).Chart.SeriesCollection(SeriesName) _
.Format.Line.ForeColor = RGB(75, 172, 198)

以及

 ... .ForeColor.ColorIndex = 3

以及

... .ForeColor.ObjectThemeColor = msoThemeColorAccent4

但是那些都给我一个“类型不匹配”的错误。 Excel的VBA录音机给了我:

ActiveChart.SeriesCollection(2).Select
With Selection.Format.Line
    .Visible = msoTrue
    .ForeColor.ObjectThemeColor = msoThemeColorAccent4
    .ForeColor.TintAndShade = 0
    .ForeColor.Brightness = 0.400000006
    .Transparency = 0
End With

我确定我在某处有一些愚蠢的,明显的错误,但我不能为我的生活找出如何在数据透视表中访问系列的颜色属性。有时感觉就像试图在一个疯狂的迷宫中试图找出某个属性属于VBA的神秘的物体层次......

2 个答案:

答案 0 :(得分:0)

我从调试一个简单的例子中发现,显然你不能将.Name属性分配给数据透视图中的系列。我希望这会引发错误,但事实并非如此。它只是通过任务,好像什么也没发生。

Sub Test()
Dim pivotChart As ChartObject
Dim cht As Chart
Dim srs As Series
Dim seriesName As String

Set pivotChart = ActiveSheet.ChartObjects(1)
Set cht = pivotChart.Chart
Set srs = cht.SeriesCollection(1)

'First look at the name:
Debug.Print srs.Name

'Assign a new name to the string variable
seriesName = "Name"

'Assign the new name from string var to the series
srs.Name = seriesName

'Now review that the name has changed. It hasn't!!
Debug.Print ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Name

End Sub

答案 1 :(得分:-1)

您似乎有尝试的解决方案。我找到的一些东西(在XL帮助中很多):

  1. 格式是一个只读属性,可以解释为什么它不起作用。
  2. 使用ChartGroups而不是SeriesCollection
  3. 来自XL帮助“没有代表单个系列行的对象;您可以为图表组中的所有点打开系列行,也可以关闭它们。”
  4. 尝试使用图表(ChartName).ChartGroup(cg)
  5. 而不是声明系列集合。

    因此,您的代码可能如下所示:

    Dim cht as Chart
    Dim cg as ChartGroup
    Set cht = ActiveSheet.ChartObjects(ChartName)
    With cht.ChartGroups(cg)
        .HasSeriesLines = True 'turn on series lines for the chart group
        With .SeriesLines.Border
            .ColorIndex=[pick your color]
        End With
    End With