Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用VBA Excel函数获取背景色_Vba_Excel - Fatal编程技术网

使用VBA Excel函数获取背景色

使用VBA Excel函数获取背景色,vba,excel,Vba,Excel,公式应返回作为参数指向的单元格的背景色。例如=BackGroundColorC3应返回单元格C3的背景色 使用rng.Address等尝试了不同的替代方案,但两种方法都不起作用。你能告诉我我做错了什么吗?只要放下显示格式 Public Function BackGroundColor(rng As Range) BackGroundColor = rng.Interior.Color End Function 这将为您提供长时间的颜色值 遗憾的是,上述函数不能返回条件格式颜色。这里有一

公式应返回作为参数指向的单元格的背景色。例如=BackGroundColorC3应返回单元格C3的背景色


使用rng.Address等尝试了不同的替代方案,但两种方法都不起作用。你能告诉我我做错了什么吗?

只要放下显示格式

Public Function BackGroundColor(rng As Range)
    BackGroundColor = rng.Interior.Color
End Function
这将为您提供长时间的颜色值

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

' 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

不能在从单元格调用的UDF中使用DisplayFormat。当然,这不会为您提供条件格式显示的颜色。@Rory,您是对的。只是在回答问题时多做了点努力
' 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