使用 VBA Excel 函数获取背景颜色

Prz*_*min 3 excel vba

该公式应返回作为参数指定的单元格的背景颜色。例如=BackGroundColor(C3)应该返回单元格的背景颜色C3

Public Function BackGroundColor(rng As Range)
    BackGroundColor = rng.DisplayFormat.Interior.Color
End Function
Run Code Online (Sandbox Code Playgroud)

尝试了不同的替代方案rng.Address等。但它们都不起作用。你能建议我做错了什么吗?

Pau*_*cis 6

只需删除 DisplayFormat,

Public Function BackGroundColor(rng As Range)
    BackGroundColor = rng.Interior.Color
End Function
Run Code Online (Sandbox Code Playgroud)

这将为您提供长整型的颜色值

遗憾的是,上述函数没有返回条件格式颜色。这是我在另一个论坛上网上找到的方法。代码是,

' 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
Run Code Online (Sandbox Code Playgroud)