Excel VBA更改透视图中的系列颜色

这是那些应该非常简单的愚蠢问题之一,但我不能完全弄清楚什么是错误的,而我在互联网上find的一切都没有奏效。

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

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 

但是这些都给我一个“types不匹配”的错误。 Excel的VBAlogging器给我:

 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中的对象的隐秘层次,

看来你有一个解决scheme与你的企图。 我发现了一些东西(XL Help中有很多):

  1. 格式是一个只读属性,这可能解释为什么这是行不通的。
  2. 使用ChartGroups而不是SeriesCollection
  3. 来自XL帮助“没有任何对象代表单个系列行,您可以为图表组中的所有点打开系列行,也可以closures它们。
  4. 尝试使用Charts(ChartName).ChartGroup(cg)来代替声明seriescollection,

所以,你的代码可能看起来像这样:

 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 

我从debugging一个简单的例子中发现,显然你不能将一个.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