小智 17
如果您想知道由条件格式规则(CFR)着色的单元格的颜色,请使用.Range.DisplayFormat.Interior.Color¹.
如果你想明确知道一个单元格可能会或可能没有被 CFR 着色的颜色,你需要迭代可能影响该单元格的CFR并查看每个.Range.FormatConditions(x).Interior.Color .
¹ 注意:.DisplayFormat不适用于工作表UDF.
下面的代码提供了该范围的HEX和RGB值,无论使用条件格式化还是其他方式进行格式化。如果范围未使用条件格式设置格式,并且您打算在Excel中将iColor函数用作UDF。它不会工作。阅读以下MSDN摘录。
请注意,DisplayFormat属性在用户定义的函数中不起作用。例如,在工作表函数中,如果您使用类似于以下内容的行,则该函数返回单元格的内部颜色:
Range.DisplayFormat.Interior.ColorIndex
Run Code Online (Sandbox Code Playgroud)
然后执行工作表函数以返回#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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18724 次 |
| 最近记录: |