Excel 2007 conditional formatting - how to get cell color?

后端 未结 7 1235
别那么骄傲
别那么骄傲 2020-12-06 02:17

Let\'s assume i have the following range from (a1:c3)

  A B C
1 -1 1 1
2 -1 0 0
3  0 0 1

Now i have selected the following range, and forma

相关标签:
7条回答
  • 2020-12-06 02:19

    .Interior.Color returns the "real" color, not the conditionally-formatted color result.

    @sss: It's not available via the API.

    The best you can do is to test the same conditions you used in the conditional formatting.

    To avoid this resulting in duplicate code, I suggest moving your conditional criteria to a UDF. Examples:

    Function IsGroup1(ByVal testvalue As Variant) As Boolean
       IsGroup1 = (testvalue < 0)
    End Function
    
    Function IsGroup2(ByVal testvalue As Variant) As Boolean
       IsGroup1 = (testvalue = 0)
    End Function
    
    Function IsGroup3(ByVal testvalue As Variant) As Boolean
       IsGroup1 = (testvalue > 0)
    End Function
    

    Then use these formulas in your Conditional formatting:

    =IsGroup1(A1)
    =IsGroup2(A1)
    =IsGroup3(A1)
    

    Then your code, rather than looking at the color of the cells, looks to see if the condition is met:

    If IsGroup1(Range("$A$1").Value) Then MsgBox "I'm red!"
    
    0 讨论(0)
  • 2020-12-06 02:24

    To get the color of a cell in a Range, you need to reference the individual cell inside the array in the form of Range("A1","C3").Cells(1,1) (for cell A1). The Excel help is pretty good if you look up the name of the property you're having issues with.

    Also, Excel 2007 uses Integers for its color types, so your best bet is to assign the color index to an integer, and using that throughout your program. For your example, try:

    Green = Range("A1","C3").Cells(1,1).Interior.Color
    Yellow = Range("A1","C3").Cells(1,3).Interior.Color
    Red = Range("A1","C3").Cells(2,1).Interior.Color
    

    And then to switch the colors to all red:

    Range("A1","C3").Interior.Color = Red
    

    Again, check the Excel help for how to use Cells([RowIndex],[ColumnIndex]).

    If the above doesn't work for you, check to see what .Interior.PatternColorIndex is equal to. I typically leave it set at xlAutomatic (solid color), and it could be set to something else if the color isn't changing.

    0 讨论(0)
  • 2020-12-06 02:25

    It doesn't appear that the "Conditional Format"-color is available programmatically. What I'd suggest that, instead, you write a small function that calculates cell color, and then just set a macro to run it on the active cell whenever you've edited the value. For example (sorry for the psuedo-code - I'm not a VBA expert anymore):

    Function GetColorForThisCell(Optional WhatCell as String) as Int
    
       If WhatCell="" Then WhatCell = ActiveCell
    
       If Range(WhatCell).value = -1 then GetColorForThisCell = vbGreen
       If Range(WhatCell).value =  0 then GetColorForThisCell = vbYellow
       If Range(WhatCell).value =  1 then GetColorForThisCell = vbRed
    End Function
    
    Sub JustEditedCell
       ActiveCell.color = GetColorForThisCell()
    End Sub
    
    Sub GetColorOfACell(WhatCell as string)
       Msgbox(GetColorForThisCell(WhatCell) )
    End Sub
    

    Though you wouldn't be able to use the built-in Excel Conditional Formatting, this would accomplish the same thing, and you'd be able to read the color from code. does this make sense?

    0 讨论(0)
  • 2020-12-06 02:26

    According to XlColorIndex Enumeration ColorIndex=-4142 means No color

    As to why this happens I'm clueless. The returned value seems to be the decimal representation of the RGB value. The improved version of this script to decrypt the value into hex RGB notation

    Function RGB(CellRef As Variant)
       RGB = ToHex(Range(CellRef).Interior.Color)
    End Function
    
    Function ToHex(ByVal N As Long) As String
       strH = ""
       For i = 1 To 6
          d = N Mod 16
          strH = Chr(48 + (d Mod 9) + 16 * (d \ 9)) & strH
          N = N \ 16
       Next i
       strH2 = ""
       strH2 = Right$(strH, 2) & Mid$(strH, 3, 2) & Left$(strH, 2)
       ToHex = strH2
    End Function
    
    0 讨论(0)
  • 2020-12-06 02:34

    As a follow up to @richardtallent (sorry, I couldn't do comments), the following link will get you a function that returns you the color index by evaluating the conditional formatting for you.

    http://www.bettersolutions.com/excel/EPX299/LI041931911.htm

    0 讨论(0)
  • 2020-12-06 02:44

    You need to refer the <Cell>.FormatConditions(index that is active).Interior.ColorIndex to retrieve the conditional formatting color of a cell.

    You may refer to the below link for an example:

    http://www.xldynamic.com/source/xld.CFConditions.html#specific

    0 讨论(0)
提交回复
热议问题