简体   繁体   English

如何使用vba在Excel 2007中找到有条件格式化单元格的填充颜色值?

[英]How do I find the fill colour value of a conditionally formatted cell in Excel 2007 using vba?

I am using a colour scale for my conditional formatting in Excel 2007 and I am having a hard time finding out the fill colour code for the conditionally formatted cells. 我在Excel 2007中使用颜色比例进行条件格式化,我很难找到条件格式化单元格的填充颜色代码。 I know Interior.Color returns the default colour value but that does not help when using conditional formatting. 我知道Interior.Color返回默认颜色值,但在使用条件格式时没有用。 I am relay quite surprised at how hard this has been to do. 我很中庸地意识到这有多么艰难。

Thank you. 谢谢。

You can access the interior color of the fomatting conditions (not what the cell currently is) like so, assuming there this is the first condition applied on the cell: 您可以访问fomatting条件的内部颜色(而不是单元格当前的颜色),假设这是应用于单元格的第一个条件:

Range("A1").FormatConditions(1).interior.color

Here's a function that will return the color codes for all the conditional formats a cell contains. 这是一个函数,它将返回单元格包含的所有条件格式的颜色代码。 It will return nothing if there are no conditions, and if there is a condition but no color is set for it, then it tells you "none". 如果没有条件,它将不返回任何内容,如果有条件但没有设置颜色,则它会告诉您“无”。

Function ConditionalColor(ByVal cell As Range)

Dim colors As String
Dim i As Long

For i = 1 To Range(cell.Address).FormatConditions.count
    If Range(cell.Address).FormatConditions(i).Interior.Color <> 0 Then
        colors = colors & "Condition " & i & ": " & _
        Range(cell.Address).FormatConditions(i).Interior.Color & vbLf
    Else
        colors = colors & "Condition " & i & ": None" & vbLf
    End If
Next

If Len(colors) <> 0 Then
    colors = Left(colors, Len(colors) - 1)
End If

ConditionalColor = colors

End Function

UPDATE : In case you are curious (I was), the color code that Excel uses is actually BGR, not RGB. 更新 :如果你好奇(我是),Excel使用的颜色代码实际上是BGR,而不是RGB。 So if you wanted to convert the code to RGB values, you can use this: 因此,如果您想将代码转换为RGB值,可以使用:

Function GetRGB(ByVal cell As range) As String

Dim R As String, G As String
Dim B As String, hexColor As String
hexCode = Hex(cell.Interior.Color)

'Note the order excel uses for hex is BGR.
B = Val("&H" & Mid(hexCode, 1, 2))
G = Val("&H" & Mid(hexCode, 3, 2))
R = Val("&H" & Mid(hexCode, 5, 2))

GetRGB = R & ":" & G & ":" & B
End Function

Hi The answers you have provided did not work because I am using a color scale so it does not return the normal 3 condition values. 嗨您提供的答案无效,因为我使用的是色标,因此它不会返回正常的3个条件值。

After much more searching I found one workaround that works. 经过更多的搜索,我找到了一个有效的解决方法。 That is to take the data and put it into word then copy it back into excel making the range go to a true colour in the cell so Interior.Color will work. 那就是取数据并将其放入单词然后将其复制回excel,使得范围在单元格中变为真彩色,因此Interior.Color将起作用。 I found someone that has taken and put it into VBA. 我找到了一个已经把它带入VBA的人。 Here is the link to it if anyone else is looking to do this. 如果其他人想要这样做,这里是它的链接

I don't have an answer that works with Excel 2007 or lower but from Excel 2010 onwards you can use the following (changing the Range to suit): 我没有适用于Excel 2007或更低版​​本的答案,但从Excel 2010开始,您可以使用以下内容(更改范围以适应):

Range("A1").DisplayFormat.Interior.ColorIndex

Fortunately, whilst the software for which I need it is supported on Excel 2003 onwards, I only actually require it in a test procedure, and the test module is removed from the production versions. 幸运的是,虽然Excel 2003以后支持我需要的软件,但实际上我只是在测试过程中需要它,并且测试模块已从生产版本中删除。

The code below was taken from VBAExpress, all credit too the original author - byundt. 下面的代码来自VBAExpress,所有信用都是原作者 - byundt。

It may need to be modified for excel 2007. 可能需要针对excel 2007进行修改。

Original Link 原始链接

Function ConditionalColor(rg As Range, FormatType As String) As Long
     'Returns the color index (either font or interior) of the first cell in range rg. If no _
    conditional format conditions apply, Then returns the regular color of the cell. _
    FormatType Is either "Font" Or "Interior"
    Dim cel As Range
    Dim tmp As Variant
    Dim boo As Boolean
    Dim frmla As String, frmlaR1C1 As String, frmlaA1 As String
    Dim i As Long

     'Application.Volatile    'This statement required if Conditional Formatting for rg is determined by the _
    value of other cells

    Set cel = rg.Cells(1, 1)
    Select Case Left(LCase(FormatType), 1)
    Case "f" 'Font color
        ConditionalColor = cel.Font.ColorIndex
    Case Else 'Interior or highlight color
        ConditionalColor = cel.Interior.ColorIndex
    End Select

    If cel.FormatConditions.Count > 0 Then
         'On Error Resume Next
        With cel.FormatConditions
            For i = 1 To .Count 'Loop through the three possible format conditions for each cell
                frmla = .Item(i).Formula1
                If Left(frmla, 1) = "=" Then 'If "Formula Is", then evaluate if it is True
                     'Conditional Formatting is interpreted relative to the active cell. _
                    This cause the wrong results If the formula isn 't restated relative to the cell containing the _
                    Conditional Formatting--hence the workaround using ConvertFormula twice In a row. _
                    If the Function were Not called using a worksheet formula, you could just activate the cell instead.
                    frmlaR1C1 = Application.ConvertFormula(frmla, xlA1, xlR1C1, , ActiveCell)
                    frmlaA1 = Application.ConvertFormula(frmlaR1C1, xlR1C1, xlA1, xlAbsolute, cel)
                    boo = Application.Evaluate(frmlaA1)
                Else 'If "Value Is", then identify the type of comparison operator and build comparison formula
                    Select Case .Item(i).Operator
                    Case xlEqual ' = x
                        frmla = cel & "=" & .Item(i).Formula1
                    Case xlNotEqual ' <> x
                        frmla = cel & "<>" & .Item(i).Formula1
                    Case xlBetween 'x <= cel <= y
                        frmla = "AND(" & .Item(i).Formula1 & "<=" & cel & "," & cel & "<=" & .Item(i).Formula2 & ")"
                    Case xlNotBetween 'x > cel or cel > y
                        frmla = "OR(" & .Item(i).Formula1 & ">" & cel & "," & cel & ">" & .Item(i).Formula2 & ")"
                    Case xlLess ' < x
                        frmla = cel & "<" & .Item(i).Formula1
                    Case xlLessEqual ' <= x
                        frmla = cel & "<=" & .Item(i).Formula1
                    Case xlGreater ' > x
                        frmla = cel & ">" & .Item(i).Formula1
                    Case xlGreaterEqual ' >= x
                        frmla = cel & ">=" & .Item(i).Formula1
                    End Select
                    boo = Application.Evaluate(frmla) 'Evaluate the "Value Is" comparison formula
                End If

                If boo Then 'If this Format Condition is satisfied
                    On Error Resume Next
                    Select Case Left(LCase(FormatType), 1)
                    Case "f" 'Font color
                        tmp = .Item(i).Font.ColorIndex
                    Case Else 'Interior or highlight color
                        tmp = .Item(i).Interior.ColorIndex
                    End Select
                    If Err = 0 Then ConditionalColor = tmp
                    Err.Clear
                    On Error GoTo 0
                    Exit For 'Since Format Condition is satisfied, exit the inner loop
                End If
            Next i
        End With
    End If

End Function

Easy way: Print screen the spreadsheet. 简单方法:打印电子表格屏幕。 Paste it into paint. 将其粘贴到油漆中。 Use the pipet tool to find the color. 使用移液器工具查找颜色。 Click Edit color. 单击编辑颜色。

BOOM found your RGB information that you can input back into excel BOOM找到了您可以输入到Excel中的RGB信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何按照工作表中的格式在 VBA 中检索 Excel 单元格值? - How do I retrieve an Excel cell value in VBA as formatted in the WorkSheet? VBA function 测试单元格是否在 Excel 中有条件地格式化 - VBA function to test if cell is conditionally formatted in Excel 如何使用VBA Excel 2007确定文件是否存在? - How Do I Determine If File Exists Using VBA Excel 2007? 使用NPOI,如何返回由Excel格式化的单元格值? - Using NPOI, how do I return a cell value as it has been formatted by Excel? 如何找到已被条件格式化的单元格颜色 - How do I find the color of the cell which has been conditionally formatted Excel导出; 使用VBA,如何将单元格导出为格式而不是原始单元格值 - Excel export ; using VBA, how to export cell as formatted rather than the raw cell value 如何使用 vba 在 Excel 中为一行着色? - How do I colour a row in Excel using vba? 结合使用VBA和Excel 2007将字符串中存储的数字与包含以文本格式设置的数字的单元格进行比较 - Using VBA with excel 2007 to compare a number stored in a string to a cell which contains a number formatted as text 如何在另一个单元格中以文本形式检索Excel单元格值,其格式与原始单元格相同? - How do I retrieve an Excel cell value in another cell, as text, formatted as in the origin cell? 如何根据每个单元格的值和固定单元格的值有条件地格式化VBA中的列? - How do I conditionally format a column in VBA based on each cell's value and a fixed cell's value?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM