Get a background color with VBA Excel function

匿名 (未验证) 提交于 2019-12-03 01:35:01

问题:

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?

回答1:

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 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!