【问题标题】:Function to return interior colour of conditional formatted cell返回条件格式单元格内部颜色的函数
【发布时间】:2019-11-04 21:54:47
【问题描述】:

我想要一个返回条件格式单元格颜色索引值的函数。

它用于检查一行中的多个单元格,如果它们使用条件格式突出显示,则需要执行操作 - 检查单元格中是否有颜色而不是创建组合条件公式更简单涵盖所有细胞的状况。或者我是这么想的..

下面的代码返回 #VALUE 错误,尽管代码在 msg 框中有效..

Function fillcolour(rng as Range) as variant

    fillcolour=rng.Displayformat.Interior.ColorIndex

End Function

期望看到返回的颜色索引值但得到#VALUE

【问题讨论】:

  • 通过条件格式(由FormatConditions产生)查看here关于DisplayFormat的信息。
  • Range.FormatConditions.Count 显示单元格的格式条件数。如果为 0,则该单元格不受任何 FormatCondition 的影响。
  • 谢谢 Asger - 这让我发疯了! Count 功能让我再次振作起来!
  • 说得太早了。我在一个有 CF 单元且没有 CF 单元的范围内对其进行了测试,这很好。问题在于所有单元格都有 CF,因此不会区分。我需要挑选出 CF 有效存储的单元格,因为尚未满足应用 CF 颜色的标准。回到绘图板..
  • 您可以比较 rng.Interior.Colorrng.DisplayFormat.Interior.Color,但不能在用户定义的函数中进行比较,正如 @AAA 已经写的那样。

标签: excel vba colors conditional-formatting


【解决方案1】:

使用更改事件:

Private Sub Worksheet_Change(ByVal Target As Range)

    Application.EnableEvents = False
    Call fillcolour(Cells(1, 1))
    Application.EnableEvents = True

End Sub



Function fillcolour(ring As Range) As Variant

    fillcolour = ring.DisplayFormat.Interior.Color
    Cells(1, 2) = fillcolour

End Function

每次更改单元格的内容时,它都会显示单元格 B1 中的背景颜色(即使它来自条件格式)。

但是,此事件返回一个目标,其中包含导致该事件的行和列(Target.Row、Target.Column 等等)。您可以使用此目标来检测您直接在单元格上所做的更改。

在新计算期间单元格发生更改时不会发生此事件。使用Calculate 事件检测范围/单元格的变化。

【讨论】:

  • 这真的是很酷的教育。我不知道你能得到一个单元格的 CF 颜色。 CF 位于单元的顶部,对。我相信它实际上并不在细胞本身中,对吧。无论如何,干得好!
【解决方案2】:

请参阅link,了解您遇到此问题的原因。您不能在用户定义的函数中使用DisplayProperty。它在 VBA 环境中或从消息框调用时工作,但从工作表调用时不起作用。解决方法是从代码中删除.DisplayFormat,如下所示:

Function fillcolour(rng as Range) as variant

fillcolour=rng.Interior.ColorIndex

End Function

【讨论】:

    【解决方案3】:

    你试过了吗?:

    Function fillcolour(ring as Range) as variant
    
    fillcolour=rng.DisplayFormat.Interior.Color
    
    End Function
    

    将其分配给单元格的事件变化

    【讨论】:

    • 是的,我做到了,但这不会返回通过条件格式应用颜色的单元格的颜色 - 它返回 16777215,我猜这是无填充颜色值
    • 我不需要知道 CF 颜色值 - 我只需要知道是否应用了 CF。有办法看到吗?
    • 如何将函数分配给单元格的事件更改?
    • 所有 Excel 工作表都有 Worksheet_Change 事件。我给你举个例子。
    【解决方案4】:

    感谢 Asger 在这里提供帮助。我现在有一个功能如下:

    Function CFCheck(rng as range) as Integer
    
    CFCheck = rng.FormatConditions.Count
    
    End Function
    

    所以如果返回的值>0,它就可以触发一个动作

    在进一步的测试中意识到这个功能只是区分有 CF 的细胞和没有 CF 的细胞,这很有帮助,但在我的情况下没有。我需要一些东西来查看具有 CF 但 CF 没有应用颜色的单元格,因为条件尚未满足。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多