The formula should return the background color of a cell pointed as argument. For example =BackGroundColor(C3)
should return background color of cell C3
.
Public Function BackGroundColor(rng As Range) BackGroundColor = rng.DisplayFormat.Interior.Color End Function
Tried different alternatives with rng.Address
etc. Neither of them worked. Can you please suggest what I am doing wrong?
Just drop the DisplayFormat,
Public Function BackGroundColor(rng As Range) BackGroundColor = rng.Interior.Color End Function
This should give you the color value in Long
It is sadly true the above function does not return for Conditional Formatting colours. Here is a method, I found online on another Forum. The code is,
' Arguments ' ---------------- ' Cell - Required Range, not a String value, for a **single** cell ' ' CellInterior - Optional Boolean (Default = True) ' True makes function return cell's Interior Color or ColorIndex based on ' the ReturnColorIndex argument False makes function return Font's Color or ' ColorIndex based on the ReturnColorIndex argument ' ' ReturnColorIndex - Optional Boolean (Default = True) ' True makes function return the ColorIndex for the cell property determined ' by the CellInterior argument False make function return the Color for the ' cell property determined by the CellInterior argument ' Function DisplayedColor(Cell As Range, Optional CellInterior As Boolean = True, _ Optional ReturnColorIndex As Long = True) As Long Dim X As Long, Test As Boolean, CurrentCell As String If Cell.Count > 1 Then Err.Raise vbObjectError - 999, , "Only single cell references allowed for 1st argument." CurrentCell = ActiveCell.Address For X = 1 To Cell.FormatConditions.Count With Cell.FormatConditions(X) If .Type = xlCellValue Then Select Case .Operator Case xlBetween: Test = Cell.Value >= Evaluate(.Formula1) And Cell.Value <= Evaluate(.Formula2) Case xlNotBetween: Test = Cell.Value <= Evaluate(.Formula1) Or Cell.Value >= Evaluate(.Formula2) Case xlEqual: Test = Evaluate(.Formula1) = Cell.Value Case xlNotEqual: Test = Evaluate(.Formula1) <> Cell.Value Case xlGreater: Test = Cell.Value > Evaluate(.Formula1) Case xlLess: Test = Cell.Value < Evaluate(.Formula1) Case xlGreaterEqual: Test = Cell.Value >= Evaluate(.Formula1) Case xlLessEqual: Test = Cell.Value <= Evaluate(.Formula1) End Select ElseIf .Type = xlExpression Then Application.ScreenUpdating = False Cell.Select Test = Evaluate(.Formula1) Range(CurrentCell).Select Application.ScreenUpdating = True End If If Test Then If CellInterior Then DisplayedColor = IIf(ReturnColorIndex, .Interior.ColorIndex, .Interior.Color) Else DisplayedColor = IIf(ReturnColorIndex, .Font.ColorIndex, .Font.Color) End If Exit Function End If End With Next If CellInterior Then DisplayedColor = IIf(ReturnColorIndex, Cell.Interior.ColorIndex, Cell.Interior.Color) Else DisplayedColor = IIf(ReturnColorIndex, Cell.Font.ColorIndex, Cell.Font.Color) End If End Function