Ответ 1
Вы можете использовать Cell.Interior.Color
, я использовал его для подсчета количества ячеек в диапазоне, который имеет заданный цвет фона (т.е. соответствует моей легенде).
У меня есть таблица, ячейки которой цветно освещаются.
Кто-нибудь знает, как я могу вернуть значение цвета фона текущей ячейки в листе Excel?
Вы можете использовать Cell.Interior.Color
, я использовал его для подсчета количества ячеек в диапазоне, который имеет заданный цвет фона (т.е. соответствует моей легенде).
Если вы смотрите таблицу, сводную таблицу или что-то с условным форматированием, вы можете попробовать:
ActiveCell.DisplayFormat.Interior.Color
Это также отлично работает на обычных ячейках.
Возможно, вы можете использовать следующие свойства:
ActiveCell.Interior.ColorIndex - one of 56 preset colors
и
ActiveCell.Interior.Color - RGB color, used like that:
ActiveCell.Interior.Color = RGB(255,255,255)
Приведенный ниже код дает значения 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 = "#" & 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