有条件地在Excel中着色图表

时间:2015-04-06 23:47:39

标签: excel vba excel-vba

Coloring a graph via value

你好!

我试图通过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)中的颜色 - 这正是此代码似乎是做。

有关代码的建议,或者是否有基于“水平(类别)轴”值的彩色条形图的替代方法?

谢谢!

1 个答案:

答案 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