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