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!
| 归档时间: |
|
| 查看次数: |
61840 次 |
| 最近记录: |