【问题标题】:How to get the background color from a Conditional Formatting in Excel using VBA如何使用 VBA 从 Excel 中的条件格式中获取背景颜色
【发布时间】:2020-09-19 18:31:09
【问题描述】:

我想在我的 VBA 脚本中获取使用 Excel 中的条件格式规则分配的单元格背景颜色。我意识到使用Range.Interior.Color 属性没有从Excel 应用条件格式功能产生的颜色。

我做了一些研究,发现这条路很长 here,它可以编译并运行,但我没有得到分配的颜色 [我总是得到 (255,255,255)]

我正在使用 Excel 2016,我想知道是否有更简单的方法来使用一些内置 VBA 函数或使用任何其他 excel 技巧来获取此信息。

【问题讨论】:

标签: vba excel


【解决方案1】:

如果您想知道通过条件格式规则 (CFR)着色的单元格的颜色,请使用 Range.DisplayFormat.Interior.Color¹。

如果您想明确知道某个单元格可能会或可能不会被 CFR 着色,您需要遍历可能影响该单元格的 CFR,并查看每个 @ 987654323@.

文档: range.DisplayFormat

¹ 注意:.DisplayFormat 不适用于工作表 UDF。

【讨论】:

    【解决方案2】:

    以下代码给出了范围的 HEXRGB 值,无论是使用条件格式格式化还是其他方式。如果范围未使用条件格式格式化,并且您打算在 Excel 中使用 iColor 函数作为 UDF。它行不通。阅读以下来自MSDN 的摘录。

    请注意,DisplayFormat 属性在用户定义的函数中不起作用。例如,在返回单元格内部颜色的工作表函数中,如果您使用类似于以下的行:

    Range.DisplayFormat.Interior.ColorIndex
    

    然后执行工作表函数以返回 #VALUE!错误。

    Public Function iColor(rng As Range, Optional formatType As String) As Variant
    'formatType: Hex for #RRGGBB, RGB for (R, G, B) and IDX for VBA Color Index
        Dim colorVal As Variant
        colorVal = rng.DisplayFormat.Interior.Color
        Select Case UCase(formatType)
            Case "HEX"
                iColor = "#" & Format(Hex(colorVal Mod 256),"00") & _
                               Format(Hex((colorVal \ 256) Mod 256),"00") & _
                               Format(Hex((colorVal \ 65536)),"00")
            Case "RGB"
                iColor = Format((colorVal Mod 256),"00") & ", " & _
                         Format(((colorVal \ 256) Mod 256),"00") & ", " & _
                         Format((colorVal \ 65536),"00")
            Case "IDX"
                iColor = rng.Interior.ColorIndex
            Case Else
                iColor = colorVal
        End Select
    End Function
    
    'Example use of the iColor function
    Sub Get_Color_Format()
        Dim rng As Range
    
        For Each rng In Selection.Cells
            rng.Offset(0, 1).Value = iColor(rng, "HEX")
            rng.Offset(0, 2).Value = iColor(rng, "RGB")
        Next
    End Sub
    

    【讨论】:

    • 感谢该功能 - 我已重用它,但遇到了一些 HEX 值的错误。如果它们是0,该函数将只返回0,但实际上它必须是00才能有效。为了解决这个问题,我用Format(Hex(colorVal....), "00") 替换了十六进制值
    • 这是非常有价值的信息。我已经修改了代码。
    【解决方案3】:

    如果您需要考虑条件格式,则需要 Range.DisplayFormat

    (在 Excel 2010 中添加)

    【讨论】:

    • 注意:.DisplayFormat 不适用于工作表 UDF。
    【解决方案4】:

    .FormatCondition 范围或选择的属性应该有助于任何格式 使用...结束于

    如果您想知道确切的颜色 RGB 值,您可以尝试录制宏并获取 rgb 值。

    【讨论】:

    • 原始问题已经refers 到使用.FormatCondition 的解决方案。我正在寻找更简单的东西,例如标记为最佳答案。
    猜你喜欢
    • 2018-05-05
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    相关资源
    最近更新 更多