I am trying to get write a simple function one can call from a cell that would return if the background of a given cell has a specific background color.
This functio
Here's a workaround to the "DisplayFormat not available in a UDF" problem.
It uses Evaluate
to side-step the UDF context
Public Function DFColor(addr)
DFColor = Range(addr).DisplayFormat.Interior.Color
End Function
Function CFColorMatches(rng As Range, R As Long, G As Long, B As Long)
CFColorMatches = (rng.Parent.Evaluate("DFColor(""" & rng.Address & """)") = RGB(R, G, B))
End Function
Note also you really don't need all that RGB-related code
RGB is calculated by VBA itself and you don't need to assume it is an array, it is a long integer in fact so if you want to check the background color of a cell you can just simply do this which will work on the worksheet too:
Public Function IsColor(Rng As Range, R As Integer, G As Integer, B As Integer) As Boolean
If Rng.Interior.Color = RGB(R, G, B) Then
IsColor = True
Else
IsColor = False
End If
End Function