Excel 2007条件格式 - 如何获取单元格颜色?

12 excel vba excel-2007 excel-vba

假设我有以下范围(a1:c3)

  A B C
1 -1 1 1
2 -1 0 0
3  0 0 1
Run Code Online (Sandbox Code Playgroud)

现在我选择了以下范围,并使用条件格式(使用默认的红黄绿色标度)对其进行格式化....现在范围颜色变为

    A         B         C
1 Green    Red     Red
2 Green   Yellow Yellow
3 Yellow Yellow Red
Run Code Online (Sandbox Code Playgroud)

现在我想询问范围内任何单元格的颜色,例如MsgBox Range("A1").Interior.Color但它不是说它是绿色,为什么?你能帮助我吗?

范围("A1").Interior.Color始终返回16777215范围("A1").Interior.ColorIndex始终返回-4142

(无论A1的颜色是红色,蓝色,绿色......)

范围("A1","C3").FormatConditions.Count这一个总是返回0,为什么?

ric*_*ent 10

.Interior.Color返回"真实"颜色,而不是有条件格式的颜色结果.

@sss:它不能通过API获得.

您可以做的最好的方法是测试条件格式中使用的相同条件.

为避免这种情况导致代码重复,我建议将条件标准移至UDF.例子:

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

然后在条件格式中使用这些公式:

=IsGroup1(A1)
=IsGroup2(A1)
=IsGroup3(A1)
Run Code Online (Sandbox Code Playgroud)

然后你的代码,而不是查看单元格的颜色,看看是否满足条件:

If IsGroup1(Range("$A$1").Value) Then MsgBox "I'm red!"
Run Code Online (Sandbox Code Playgroud)


小智 6

您需要引用<Cell>.FormatConditions(index that is active).Interior.ColorIndex以检索单元格的条件格式颜色.

您可以参考以下链接获取示例:

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


小智 0

因为我一次可能有超过三种不同的颜色...我没有找到任何好的方法来使用条件格式的默认颜色处理这个问题...我就是这样做的。然后每当我询问单元格的颜色时,我都会检索到正确的颜色!

 for (int t = 0; t < d_distinct.Length; t++ )
 {                        
   Excel.FormatCondition cond =
    (Excel.FormatCondition)range.FormatConditions.Add(
    Excel.XlFormatConditionType.xlCellValue,
    Excel.XlFormatConditionOperator.xlEqual, 
    "="+d_distinct[t],
    mis, mis, mis, mis, mis);
   cond.Interior.PatternColorIndex = 
    Excel.Constants.xlAutomatic;
  cond.Interior.TintAndShade = 0;
  cond.Interior.Color = ColorTranslator.ToWin32(c[t]);
  cond.StopIfTrue = false;                        
}
Run Code Online (Sandbox Code Playgroud)

d_distinct 保存一个范围内的所有不同值... c 是一个 Color[],它为每个不同值保存不同的颜色!这段代码可以很容易地翻译成vb!