Excel 如何使图表填充参考单元格颜色和图案?

Excel 如何使图表填充参考单元格颜色和图案?,excel,vba,colors,Excel,Vba,Colors,我已经创建了温度计图表,它是根据我工作表中单元格的范围(红色-差,黄色-平均,绿色-好)着色的。也就是说,图表引用单元格的颜色来确定填充颜色。然而,当用黑白印刷时,红色和绿色很难区分。我不想放弃红绿灯的颜色,因为它对我的观众来说是直观的 我试图找出如何让图表填充来反映单元格中的图案以及颜色。我的当前语法(用于颜色填充)如下所示 Sub ColorByValueSMICAUpdate() Dim rPatterns As Range Dim iPattern As Long Dim v

我已经创建了温度计图表,它是根据我工作表中单元格的范围(红色-差,黄色-平均,绿色-好)着色的。也就是说,图表引用单元格的颜色来确定填充颜色。然而,当用黑白印刷时,红色和绿色很难区分。我不想放弃红绿灯的颜色,因为它对我的观众来说是直观的

我试图找出如何让图表填充来反映单元格中的图案以及颜色。我的当前语法(用于颜色填充)如下所示

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
子ColorByValueSMICAUpdate()
变暗模式作为范围
暗淡的iPattern尽可能长
Dim vPatterns作为变量
将i点变暗为长
作为变量的Dim V值
暗右值范围
设置rPatterns=ActiveSheet.Range(“P5:P11”)
vPatterns=rPatterns.Value
使用ActiveChart.SeriesCollection(1)
v值=.Values
对于iPoint=1到uBond(V值)
对于iPattern=1到uBond(vPatterns)

如果vValues(iPoint)这个问题的关键是单元格上的填充是一个interior.pattern对象,图表上的填充是一个format.fill.pattern对象。唯一的方法是将一个图案转换成上面David Zemens所述的图案

下面的代码可以正常工作,但您可能需要使用哪个模式转换为哪个模式

经过尝试和测试

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
子ColorByValueSMICAUpdate()
变暗模式作为范围
暗淡的iPattern尽可能长
Dim vPatterns作为变量
将i点变暗为长
作为变量的Dim V值
暗右值范围
设置rPatterns=ActiveSheet.Range(“P5:P11”)
vPatterns=rPatterns.Value
使用ActiveChart.SeriesCollection(1)
v值=.Values
对于iPoint=1到uBond(V值)
对于iPattern=1到uBond(vPatterns)

如果是vValues(iPoint),是否可以对其进行硬编码?我认为单元格的填充模式与点填充中相同/相似的外观模式不同。我被措辞搞糊涂了,您试图向当前代码中添加哪些功能?我试图使图表填充与单元格中的填充模式具有相同的模式(我已经有了颜色)。这些模式不是相同类型的模式(即,外观相似/相同的模式在对象模型中没有给定相同的常量值)。您需要从一组已知的预定义格式对中执行此操作,或者创建一个基于两个不同枚举映射“相似性”的算法。