Excel VBA 函数无法检测按条件格式着色的单元格

Excel VBA 函数无法检测按条件格式着色的单元格

我的 excel 工作表上有一些条件格式条件,这些条件会用不同的颜色填充单元格。我试图计算 excel 中由我的条件格式着色的单元格数量,以便我可以检查它们的比例,但出于某种原因,无论如何它都会一直返回 0。这是我的 VBA 函数:

Function CountCellsByColor(data_range As Range, cell_color As Range)

Dim cell As Range
Dim cnt As Integer
cnt = 0

For Each cell In data_range
    If cell_color.Interior.Color = cell.Interior.Color Then
        cnt = cnt + 1
    End If
Next cell

CountCellsByColor = cnt
End Function

我有 4 个不同的条件来填充单元格的颜色,但此函数均未检测到任何条件。当我让函数计算某个范围内的白色单元格时,它会正常计算。是不是在处理条件格式时,它会给出一种无法通过这种方式检测到的“假”颜色?还是我的代码出了其他问题?

十分感谢你的帮助!

答案1

Interior.Color 属性仅提供直接应用于单元格的颜色。要访问条件格式生成的颜色,请使用 DisplayFormat.Interior.Color 属性。

请注意,这在用户定义函数中不起作用,因此您必须将函数更改为子函数,将结果写入工作表的某个位置。

答案2

如果您想将此函数用作 UDF,您应该使用 DisplayFormat 属性,如前所述,此外您还应该间接调用此函数作为 Evaluate 方法的文本参数。

Function CountCellsByColor(data_range As Range, cell_color As Range)

    Dim cell As Range
    Dim cnt As Integer
    cnt = 0

    For Each cell In data_range
        If cell_color.DisplayFormat.Interior.Color = cell.DisplayFormat.Interior.Color Then
            cnt = cnt + 1
        End If
    Next cell

    CountCellsByColor = cnt
End Function

Function ECountCellsByColor(data_range As Range, cell_color As Range)
  '  Application.Volatile   ' if necessary
    ECountCellsByColor = data_range.Parent.Evaluate("CountCellsByColor(" & _
        data_range.Address & "," & cell_color.Address & ")")
End Function

相关内容