更改VBA代码填充系列图的颜色
新手VBA用户在这里。希望有人能帮忙?我认为这可能很简单,但我是一个noobie。更改VBA代码填充系列图的颜色
我有两种类型的图表将被BI工具填充到Excel中,我需要根据一些规则对它们中的可用系列进行着色。
第1张图显示按年份(年份是系列)的支出,并且从几个月到24个月有不同程度的历史记录。这意味着我现在的24个月的数据分布在年年 2015年,2016年,2017年.......明年这改变到2016年,2017年,2018年,因为我只保持滚动24个月。
无论我需要最近一年(例如2017年)的条形图数据中的数据集以蓝色显示,前一年(例如2016年)以橙色显示,然后是前一年(例如2015)灰色。
有可能我不会总是有24个月(即全新的客户),所以如果只有6个月,同样的着色逻辑适用,并且最近一年需要以蓝色显示。
的第二个图表更简单,我认为。我所显示的图表显示了基于表现的系列值 - 这些系列被称为“准时”,“宽容”和“后期”。
他们的颜色需要:“准时”=中等绿色......“宽容”=浅绿色......“迟到”=红色。
的这里的是,1 或或所有3这些系列的可以存在没有预测给定的图表中,所以我需要的VBA,以确定哪些系列是可用的,然后颜色相应。
我一直在玩的代码,但它只是我从其它饲料拼凑起来的,并且不以任何方式从建基地。我想我需要使用ForEach类型的语法,因为我知道我需要在每个SeriesCollection对象中都有一个循环。
如果有人能帮忙,我会很感激。
这里是你的第一个问题,一个简单的小程序,在您的图表蓝色,橙色重新着色的系列,和灰色,但反向的默认顺序:
Sub ReverseDefaultColors()
Dim iSrs As Long, nsrs As Long
If ActiveChart Is Nothing Then
MsgBox "Select a chart and try again.", vbExclamation, "No Active Chart"
Else
With ActiveChart
nsrs = .SeriesCollection.Count
' work backwards from last series
For iSrs = nsrs To 1 Step -1
Select Case nsrs - iSrs
Case 0 ' last series
.SeriesCollection(iSrs).Format.Fill.ForeColor.ObjectThemeColor = _
msoThemeColorAccent1
Case 1 ' next to last series
.SeriesCollection(iSrs).Format.Fill.ForeColor.ObjectThemeColor = _
msoThemeColorAccent2
Case 2 ' etc.
.SeriesCollection(iSrs).Format.Fill.ForeColor.ObjectThemeColor = _
msoThemeColorAccent3
End Select
Next
End With
End If
End Sub
下面是另一个关于第二个问题,着色绿色,浅绿色和红色根据系列名称(根据需要调整RGB)。你应该注意到有些人(约8%的男性,少于1%的女性)可能会有区别绿色和红色的问题。出于这个原因,蓝色和橙色经常被用作首选配色方案。
Sub ColorGreenToRed()
Dim iSrs As Long, nSrs As Long
If ActiveChart Is Nothing Then
MsgBox "Select a chart and try again.", vbExclamation, "No Active Chart"
Else
With ActiveChart
nSrs = .SeriesCollection.Count
For iSrs = 1 To nSrs
' only format series whose names are found
Select Case LCase$(.SeriesCollection(iSrs).Name)
Case "on time"
.SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = _
RGB(0, 176, 80) ' Green
Case "in tolerance"
.SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = _
RGB(146, 208, 80) ' Light Green
Case "late"
.SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = _
RGB(255, 0, 0) ' Red
End Select
Next
End With
End If
End Sub
如果您添加了一些示例数据和典型情节的截图,这会增加获得帮助的几率。 –
感谢您的建议 - 我添加了一些图片,显示我需要的内容以及目前正在链接的枢纽。 –
看着图表,它看起来不像你需要VBA。列总是保持相同的颜色。只需修改每个图表的样式以符合要求即可。 – jsotola