How to make diagrams fill the color and patterns of the reference cell?

I created thermometer charts that are colored based on the range (red - bad, yellow - medium, green - good) from the cells in my sheet. That is, the chart indicates the color of the cell to determine the fill color. However, when printing in black and white, red and green are difficult to distinguish. I do not want to give up the color of the brake lights, because it is intuitive for my audience.

I am trying to figure out how to get a chart fill to reflect a pattern in cells in addition to color. My current syntax (for fill color) is given below.

Sub ColorByValueSMICAUpdate()
  Dim rPatterns As Range
  Dim iPattern As Long
  Dim vPatterns As Variant
  Dim iPoint As Long
  Dim vValues As Variant
  Dim rValue As Range

  Set rPatterns = ActiveSheet.Range("P5:P11")
  vPatterns = rPatterns.Value
  With ActiveChart.SeriesCollection(1)
    vValues = .Values
    For iPoint = 1 To UBound(vValues)
      For iPattern = 1 To UBound(vPatterns)
        If vValues(iPoint) <= vPatterns(iPattern, 1) Then
          .Points(iPoint).Format.Fill.ForeColor.RGB = _
              rPatterns.Cells(iPattern, 1).Interior.Color
          Exit For
        End If
      Next
    Next
  End With
End Sub

Thank!

+4
source share
1 answer

, inner.pattern, format.fill.patterned. - , , .

, , .

Sub ColorByValueSMICAUpdate()
  Dim rPatterns As Range
  Dim iPattern As Long
  Dim vPatterns As Variant
  Dim iPoint As Long
  Dim vValues As Variant
  Dim rValue As Range

  Set rPatterns = ActiveSheet.Range("P5:P11")
  vPatterns = rPatterns.Value
  With ActiveChart.SeriesCollection(1)
    vValues = .Values
    For iPoint = 1 To UBound(vValues)
      For iPattern = 1 To UBound(vPatterns)
        If vValues(iPoint) <= vPatterns(iPattern, 1) Then
          .Points(iPoint).Format.Fill.ForeColor.RGB = _
              rPatterns.Cells(iPattern, 1).Interior.Color
          .Points(iPoint).Format.Fill.Patterned _
              ConvertPatternToPattened(rPatterns.Cells(iPattern, 1).Interior.pattern)
          Exit For
        End If
      Next
    Next
  End With
End Sub

Private Function ConvertPatternToPattened(pattern As Integer) As Integer

' To change the converted patterns please refer to the two references below
'
' Patterned List - http://msdn.microsoft.com/en-us/library/office/aa195819(v=office.11).aspx
' Pattern List - http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.interior.pattern(v=office.15).aspx


Dim Result As Integer

Result = msoPattern90Percent

Select Case pattern
    Case xlPatternChecker
        Result = msoPatternLargeCheckerBoard
    Case xlPatternCrissCross
        Result = msoPattern90Percent
    Case xlPatternDown
        Result = msoPatternNarrowVertical
    Case xlPatternGray16
        Result = msoPattern20Percent
    Case xlPatternGray25
        Result = msoPattern25Percent
    Case xlPatternGray50
        Result = msoPattern50Percent
    Case xlPatternGray75
        Result = msoPattern75Percent
    Case xlPatternGray8
        Result = msoPattern10Percent
    Case xlPatternGrid
        Result = msoPatternSmallGrid
    Case xlPatternHorizontal
        Result = msoPatternLightHorizontal
    Case xlPatternLightDown
        Result = msoPatternLightVertical
    Case xlPatternLightHorizontal
        Result = msoPatternNarrowHorizontal
    Case xlPatternLightUp
        Result = msoPatternLightVertical
    Case xlPatternLightVertical
        Result = msoPattern90Percent
    Case xlPatternSemiGray75
        Result = msoPattern80Percent
    Case xlPatternSolid
        Result = msoPattern90Percent
    Case xlPatternUp
        Result = msoPatternDarkVertical
    Case xlPatternVertical
        Result = msoPatternDashedVertical
    Case Else
        Result = msoPattern90Percent
End Select

ConvertPatternToPattened = Result

End Function
+2

Source: https://habr.com/ru/post/1547748/


All Articles