如何使用VBA从Excel中的条件格式获取背景颜色

时间:2017-07-15 21:12:24

标签: excel vba excel-vba

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

我做了一些研究,我找到了很长的路here,它编译并运行,但我没有得到指定的颜色[我总是得到(255,255,255)]

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

4 个答案:

答案 0 :(得分:12)

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

如果你想明确知道CFR的单元格可能是或者可能没有着色是什么颜色,你需要迭代可能影响那个单元格并查看每个单元格的CFR。 Range.FormatConditions( X )。Interior.Color。

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

答案 1 :(得分:4)

如果您需要考虑条件格式

,则需要Range.DisplayFormat

(在Excel 2010中添加)

答案 2 :(得分:4)

以下代码提供 HEX RGB 值,无论是使用条件格式格式化还是其他方式。如果范围未使用条件格式进行格式化,并且您打算在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 = "#" & Hex(colorVal Mod 256) & Hex((colorVal \ 256) Mod 256) & Hex((colorVal \ 65536))
        Case "RGB"
            iColor = (colorVal Mod 256) & ", " & ((colorVal \ 256) Mod 256) & ", " & (colorVal \ 65536)
        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
        myCell.Offset(0, 1).Value = iColor(rng, "HEX")
        myCell.Offset(0, 2).Value = iColor(rng, "RGB")
    Next
End Sub

答案 3 :(得分:-3)

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

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