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中有很多):
- 格式是一个只读属性,这可能解释为什么这是行不通的。
- 使用ChartGroups而不是SeriesCollection
- 来自XL帮助“没有任何对象代表单个系列行,您可以为图表组中的所有点打开系列行,也可以closures它们。
- 尝试使用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