我想在我的VBA脚本中获取在Excel中使用条件格式设置规则分配的单元格背景颜色。我意识到使用Range.Interior.Color
属性没有Excel中应用的条件格式化功能的颜色。
我做了一些研究,我发现这很长的路here,它编译并运行,但我没有得到指定的颜色[我得到总是(255,255,255)]
我正在使用Excel 2016,我想知道是否有一种更简单的方法来使用一些内置的VBA函数或使用任何其他excel技巧来获取此信息。
如果您想知道由条件格式规则(CFR)着色的单元格的颜色,请使用.Range.DisplayFormat.Interior.Color¹。
如果你想明确知道一个单元格可能会或可能没有被CFR着色的颜色,你需要迭代可能影响该单元格的CFR并查看每个.Range.FormatConditions(x).Interior.Color 。
¹注意:.DisplayFormat不适用于工作表UDF。
如果您需要考虑条件格式,您需要Range.DisplayFormat
(在Excel 2010中添加)
下面的代码给出了范围的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
范围或选择的.FormatCondition属性应该有助于任何格式使用...结束
如果您想知道RGB值的确切颜色,您可以尝试录制宏并获取rgb值。