Приведенный ниже код дает значение HEX и RGB диапазона, отформатированного с использованием условного форматирования или иным образом Если диапазон не отформатирован с использованием условного форматирования, и вы намерены использовать функцию iColor в Excel как UDF. Это не сработает. Прочитайте приведенную ниже выдержку из MSDN .
Обратите внимание, что свойство DisplayFormat не работает в пользовательских функциях. Например, в функции листа, которая возвращает внутренний цвет ячейки, если вы используете строку, похожую на:
Range.DisplayFormat.Interior.ColorIndex
затем выполняется функция листа, возвращающая # ЗНАЧЕНИЕ! ошибка. Если вы не находите цвет условно отформатированного диапазона, тогда я рекомендую вам использовать
Range.Interior.ColorIndex
, тогда эта функция также может использоваться как UDF в Excel. Например, iColor (B1, "HEX")
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 to get the background color of selected cells
Sub Get_Background_Color_Selection_Cells()
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