你好!
我试图通过VBA在excel中为图形(任务跟踪器)着色。我们的想法是将所有“类别”着色为某种颜色 - 在视觉上,这意味着将每个“行”上的所有条形都设为特定颜色。我正在使用以下代码,我从http://peltiertech.com/vba-conditional-formatting-of-charts-by-category-label/复制了
Sub ColorByCategoryLabel()
Dim rPatterns As Range
Dim iCategory As Long
Dim vCategories As Variant
Dim rCategory As Range
Set rPatterns = ActiveSheet.Range("A1:A5")
With ActiveChart.SeriesCollection(2)
vCategories = .XValues
For iCategory = 1 To UBound(vCategories)
Set rCategory = rPatterns.Find(What:=vCategories(iCategory))
.Points(iCategory).Format.Fill.ForeColor.RGB = rCategory.Interior.Color
Next
End With
End Sub
我无法弄清楚出了什么问题。
基本上,我有一个系列(series2),水平(类别)轴标签由1-5的整数组成。此类别确定条形图的垂直位置,但我也想根据此垂直位置为该系列中的每个条形图着色,根据范围(a1:a5)中的颜色 - 这正是此代码似乎是做。
有关代码的建议,或者是否有基于“水平(类别)轴”值的彩色条形图的替代方法?
谢谢!
答案 0 :(得分:1)
好吧,我通过逐步解决了我的问题。我无法想象这是根据它们的高度来制作水平条形图的最简单方法,但它有效。
Sub ColorByCategoryLabel()
Dim iCategory As Long
Dim vCategories As Variant
Dim rCategory As Range
Dim CurColor As Double
Dim CurColorIndex As Long
Dim CurHeight As Double
CurHeight = 0
CurColorIndex = 1
CurColor = ActiveSheet.Cells(CurColorIndex + 1, 10).Interior.Color
ActiveSheet.ChartObjects("Chart 1").Select
With ActiveChart.SeriesCollection(2)
vCategories = .XValues
For iCategory = 1 To UBound(vCategories)
If .Points(iCategory).Top > CurHeight Then
CurColorIndex = CurColorIndex + 1
CurColor = ActiveSheet.Cells(CurColorIndex + 1, 10).Interior.Color
CurHeight = .Points(iCategory).Top
End If
.Points(iCategory).Format.Fill.ForeColor.RGB = CurColor
Next
End With
End Sub
您需要修改
行Curcolor = ActiveSheet.Cells(CurColorIndex+1,10).Interior.Color
正确指定要复制背景颜色的单元格。
顺便说一句,如果有人对timetracker感兴趣,那么它会在这里托管:https://drive.google.com/file/d/0B85fvjQDbl3lUVpPNmdGT1VkWW8/view?usp=sharing