我希望有人能帮助我解决以下问题。我使用了3种不同的VBA编码方法(2种来自这个网站),它们都在下面的同一个障碍中失败了。
我有一个电子表格,它使用2列作为散点图的数据源。此图表中的数据点根据第3列中使用的条件格式进行着色。因此,在第3列中,如果值为"X",则数据点应该是粉红色的。否则,数据点应该是绿色的。这工作得很好。我是如何做到这一点的:https://www.reddit.com/r/excel/comments/3x2cme/scatter_plot_with_color_based_on_a_third_value/这是我的代码:
Sub ColorCode()
Dim i As Integer
Dim MyCount As Integer
MyCount = ActiveChart.SeriesCollection(1).Points.Count * ActiveChart.SeriesCollection.Count
'MsgBox ActiveChart.SeriesCollection(1).Points.Count *
ActiveChart.SeriesCollection.Count
For i = 1 To MyCount
ActiveChart.SeriesCollection(1).Points(i).Select
With Selection.Format.Fill
.Visible = msoTrue
.ForeColor.RGB = Range("i" & i + 1).DisplayFormat.Interior.Color
End With
Next
End Sub
但是,当我过滤源数据时,数据点的颜色会发生变化。我得出了以下结论:-当数据源未过滤时,第3列中的第4行数据是粉红色的。这很好。-筛选数据源时,第3列的第4行数据为绿色。这很好。-但是,此筛选行的相关数据点是粉红色的,而它应该是绿色的-筛选的源表中的第4行数据将始终保留原始未筛选表的第4行的条件格式。
我需要的是过滤器对数据点的颜色没有影响,但仍然隐藏被过滤掉的数据点。或者,换句话说,在过滤数据时,数据点将保留上面的VBA代码在过滤之前应用的颜色属性。
发布于 2018-02-05 13:27:26
数组很方便。
Sub ColorCode()
Dim i As Integer, n As Integer
Dim MyCount As Integer
Dim rngColor As Range, vRng() As Range
MyCount = ActiveChart.SeriesCollection(1).Points.Count * ActiveChart.SeriesCollection.Count
Set rngColor = Range("i2", Range("i" & Rows.Count).End(xlUp))
Set rngColor = rngColor.SpecialCells(xlCellTypeVisible)
For Each Rng In rngColor
n = n + 1
ReDim Preserve vRng(1 To n)
Set vRng(n) = Rng
Next Rng
'MsgBox ActiveChart.SeriesCollection(1).Points.Count * ActiveChart.SeriesCollection.Count
For i = 1 To MyCount
ActiveChart.SeriesCollection(1).Points(i).Select
With Selection.Format.Fill
.Visible = msoTrue
'.ForeColor.RGB = Range("i" & i + 1).DisplayFormat.Interior.Color
.ForeColor.RGB = vRng(i).DisplayFormat.Interior.Color
End With
Next
End Sub
发布于 2018-02-11 20:46:46
这有助于解决一些类似的图表格式问题:
Excel文件选项卡>选项>高级>图表
取消选中“当前工作簿的属性跟随图表数据点”
https://stackoverflow.com/questions/48622211
复制相似问题