删除系列后恢复图表默认颜色
Restore chart default colours after deleting series
嗨,我不敢相信我找不到这个问题的答案,但我已经看过了。
在 Excel 中,我想将默认调色板顺序恢复到我已从中删除了一些系列的图表。
也就是说,如果我的调色板是:红色、绿色、蓝色、黄色、橙色、灰色
我最初有一个图表,其中包含 6 条线,它们是按此顺序排列的。
如果我再删除绿线、蓝线和黄线:
我希望有一种方法可以更新图表,这样我就可以 return 把它变成红色、绿色、蓝色,而不是剩下的红色、橙色、灰色——也就是说,如果我重新创建从头开始的最终图表:
显然我可以从头开始重新创建或手动更改颜色,但我经常这样做,而且 select 所有列并删除我不想要的列通常比通过并制作更容易逐行图表。
我使用的是公司 excel,权限很小,所以请不要使用插件。只是想知道这在标准 excel 环境中是否可行。
手动程序是 save the graph model 并在删除系列后重新加载它。
VBA 解决方案可能与此类似:
Sub SubParallelMeridianFormat()
'Declarations.
Dim IntCounter01 As Integer
Dim Ser01 As Series
Dim Char01 As Object
Dim LngColourPalette(1 To 6) As Long
'Setting LngColourPalette.
LngColourPalette(1) = vbRed
LngColourPalette(2) = vbGreen
LngColourPalette(3) = vbBlue
LngColourPalette(4) = vbYellow
LngColourPalette(5) = RGB(255, 165, 0)
LngColourPalette(6) = 16711680
'Setting Char01.
Set Char01 = ActiveSheet.Shapes("Graph 1")
'If there are not enouth colour, the macro is terminated.
If Char01.Chart.SeriesCollection.Count > UBound(LngColourPalette) Then
MsgBox "The graph contains " & Char01.Chart.SeriesCollection.Count & " series while only " & UBound(LngColourPalette) & " colours have been specified. No changes will be applied. Add more colours to the code and try again.", vbCritical + vbOKOnly, "Not enouth colour"
Exit Sub
End If
'Changing colours.
For Each Ser01 In Char01.Chart.SeriesCollection
IntCounter01 = IntCounter01 + 1
Ser01.Format.Line.ForeColor.RGB = LngColourPalette(IntCounter01)
Next
End Sub
您可能需要编辑 LngColourPalette
和 Char01
的设置。
为了从 pre-existing 图中获取颜色列表,您可以使用此代码:
Sub SubColourList()
'Declarations.
Dim Ser01 As Series
Dim Char01 As Object
Dim IntCounter01 As Integer
'Setting Char01.
Set Char01 = ActiveSheet.Shapes("Graph 1")
'Reporting colours.
For Each Ser01 In Char01.Chart.SeriesCollection
IntCounter01 = IntCounter01 + 1
Debug.Print "LngColourPalette(" & IntCounter01 & ") = "; Ser01.Format.Line.ForeColor.RGB
Next
End Sub
这里有一个list of colour constants for VBA and a list of colour codes in multiple coding style。
我做了一些测试,大多数只调整颜色的宏似乎会造成混乱,特别是如果你想通过使用“图表设计->更改颜色”选项来调整图表。所以我采用了“删除所有系列并再次添加它们”的方法。这在我的电脑 (Office 365) 上运行良好。 Select 图表和 运行 这个宏(你可以分配一个快捷键来加快速度:https://www.excelcampus.com/vba/keyboard-shortcut-run-macro/):
Sub ChartRemoveReAddData()
Dim DataArr() As String
Dim n As Long
Set AChart = Application.ActiveChart
If Not AChart Is Nothing Then
'First add series to DataArr
i = 0
For Each Ser1 In AChart.SeriesCollection
sFmla = Ser1.Formula
ReDim Preserve DataArr(i)
DataArr(i) = sFmla
i = i + 1
Next Ser1
'Again, but now reverse to remove them
For n = AChart.SeriesCollection.Count To 1 Step -1
AChart.SeriesCollection(n).Delete
Next n
AChart.ClearToMatchStyle
AChart.ClearToMatchColorStyle
For i = 0 To UBound(DataArr)
Set S = AChart.SeriesCollection.NewSeries
S.Formula = DataArr(i)
Next i
End If
End Sub
关于颜色的更多细节:Excel 有 10 种主题颜色(加上 2 种用于超链接),您可以通过单击找到它们,例如字体颜色或背景颜色按钮。该概述的最后 6 个与图表相关。它们被命名为 Accent 1 到 Accent 6 (https://docs.microsoft.com/en-us/office/vba/api/Office.MsoThemeColorIndex)。正如您所看到的,当您 select 您的图表和 select“图表设计 - 更改颜色”时,这些颜色会显示出来。所以例如ChartColor = 11(在 VBA 中)表示您的图表显示颜色 Accent 1(第一个系列)、Accent 3(第二个系列)、Accent 5(第三个系列)。
此方法将遍历图表,捕获现有系列的公式,删除现有系列,然后从存储的公式中将它们添加回来。这样一来,Excel 将重新应用默认颜色。
我认为它比其他建议的答案更简单,甚至是标记为“答案”的那个,它实际上会按照要求执行。
Sub RebuildChartWithDefaultSeriesColors()
With ActiveChart.SeriesCollection
Dim nSrs As Long
nSrs = .Count
Dim vSrsFmla As Variant
ReDim vSrsFmla(1 To nSrs)
Dim iSrs As Long
For iSrs = nSrs To 1 Step -1
vSrsFmla(iSrs) = .Item(iSrs).Formula
.Item(iSrs).Delete
Next
For iSrs = 1 To nSrs
With .NewSeries
.Formula = vSrsFmla(iSrs)
End With
Next
End With
End Sub
嗨,我不敢相信我找不到这个问题的答案,但我已经看过了。
在 Excel 中,我想将默认调色板顺序恢复到我已从中删除了一些系列的图表。
也就是说,如果我的调色板是:红色、绿色、蓝色、黄色、橙色、灰色
我最初有一个图表,其中包含 6 条线,它们是按此顺序排列的。
如果我再删除绿线、蓝线和黄线:
我希望有一种方法可以更新图表,这样我就可以 return 把它变成红色、绿色、蓝色,而不是剩下的红色、橙色、灰色——也就是说,如果我重新创建从头开始的最终图表:
显然我可以从头开始重新创建或手动更改颜色,但我经常这样做,而且 select 所有列并删除我不想要的列通常比通过并制作更容易逐行图表。
我使用的是公司 excel,权限很小,所以请不要使用插件。只是想知道这在标准 excel 环境中是否可行。
手动程序是 save the graph model 并在删除系列后重新加载它。
VBA 解决方案可能与此类似:
Sub SubParallelMeridianFormat()
'Declarations.
Dim IntCounter01 As Integer
Dim Ser01 As Series
Dim Char01 As Object
Dim LngColourPalette(1 To 6) As Long
'Setting LngColourPalette.
LngColourPalette(1) = vbRed
LngColourPalette(2) = vbGreen
LngColourPalette(3) = vbBlue
LngColourPalette(4) = vbYellow
LngColourPalette(5) = RGB(255, 165, 0)
LngColourPalette(6) = 16711680
'Setting Char01.
Set Char01 = ActiveSheet.Shapes("Graph 1")
'If there are not enouth colour, the macro is terminated.
If Char01.Chart.SeriesCollection.Count > UBound(LngColourPalette) Then
MsgBox "The graph contains " & Char01.Chart.SeriesCollection.Count & " series while only " & UBound(LngColourPalette) & " colours have been specified. No changes will be applied. Add more colours to the code and try again.", vbCritical + vbOKOnly, "Not enouth colour"
Exit Sub
End If
'Changing colours.
For Each Ser01 In Char01.Chart.SeriesCollection
IntCounter01 = IntCounter01 + 1
Ser01.Format.Line.ForeColor.RGB = LngColourPalette(IntCounter01)
Next
End Sub
您可能需要编辑 LngColourPalette
和 Char01
的设置。
为了从 pre-existing 图中获取颜色列表,您可以使用此代码:
Sub SubColourList()
'Declarations.
Dim Ser01 As Series
Dim Char01 As Object
Dim IntCounter01 As Integer
'Setting Char01.
Set Char01 = ActiveSheet.Shapes("Graph 1")
'Reporting colours.
For Each Ser01 In Char01.Chart.SeriesCollection
IntCounter01 = IntCounter01 + 1
Debug.Print "LngColourPalette(" & IntCounter01 & ") = "; Ser01.Format.Line.ForeColor.RGB
Next
End Sub
这里有一个list of colour constants for VBA and a list of colour codes in multiple coding style。
我做了一些测试,大多数只调整颜色的宏似乎会造成混乱,特别是如果你想通过使用“图表设计->更改颜色”选项来调整图表。所以我采用了“删除所有系列并再次添加它们”的方法。这在我的电脑 (Office 365) 上运行良好。 Select 图表和 运行 这个宏(你可以分配一个快捷键来加快速度:https://www.excelcampus.com/vba/keyboard-shortcut-run-macro/):
Sub ChartRemoveReAddData()
Dim DataArr() As String
Dim n As Long
Set AChart = Application.ActiveChart
If Not AChart Is Nothing Then
'First add series to DataArr
i = 0
For Each Ser1 In AChart.SeriesCollection
sFmla = Ser1.Formula
ReDim Preserve DataArr(i)
DataArr(i) = sFmla
i = i + 1
Next Ser1
'Again, but now reverse to remove them
For n = AChart.SeriesCollection.Count To 1 Step -1
AChart.SeriesCollection(n).Delete
Next n
AChart.ClearToMatchStyle
AChart.ClearToMatchColorStyle
For i = 0 To UBound(DataArr)
Set S = AChart.SeriesCollection.NewSeries
S.Formula = DataArr(i)
Next i
End If
End Sub
关于颜色的更多细节:Excel 有 10 种主题颜色(加上 2 种用于超链接),您可以通过单击找到它们,例如字体颜色或背景颜色按钮。该概述的最后 6 个与图表相关。它们被命名为 Accent 1 到 Accent 6 (https://docs.microsoft.com/en-us/office/vba/api/Office.MsoThemeColorIndex)。正如您所看到的,当您 select 您的图表和 select“图表设计 - 更改颜色”时,这些颜色会显示出来。所以例如ChartColor = 11(在 VBA 中)表示您的图表显示颜色 Accent 1(第一个系列)、Accent 3(第二个系列)、Accent 5(第三个系列)。
此方法将遍历图表,捕获现有系列的公式,删除现有系列,然后从存储的公式中将它们添加回来。这样一来,Excel 将重新应用默认颜色。
我认为它比其他建议的答案更简单,甚至是标记为“答案”的那个,它实际上会按照要求执行。
Sub RebuildChartWithDefaultSeriesColors()
With ActiveChart.SeriesCollection
Dim nSrs As Long
nSrs = .Count
Dim vSrsFmla As Variant
ReDim vSrsFmla(1 To nSrs)
Dim iSrs As Long
For iSrs = nSrs To 1 Step -1
vSrsFmla(iSrs) = .Item(iSrs).Formula
.Item(iSrs).Delete
Next
For iSrs = 1 To nSrs
With .NewSeries
.Formula = vSrsFmla(iSrs)
End With
Next
End With
End Sub