检测范围内的条件格式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检测范围内的条件格式相关的知识,希望对你有一定的参考价值。

我一直试图在excel上设置一个电子表格,它可以进行大量的计算,但也允许其中的变量(即团队数量有时会发生变化)。

在这种情况下,我有4个独立的团队。每个团队都有自己的默认条件格式,它将为该团队设置默认颜色。我通过检测单元格是否为空白来完成此操作。

Example of teams

如您所见,显示2个团队的默认颜色为蓝色和橙色。

我遇到的问题是当有人从Orange到Blue团队进行复制和粘贴时,它会对所述团队进行格式化。例如,如果我从Orange团队复制并粘贴黄色的“COURSE”到蓝色团队,当我删除“COURSE”这个词时,它应该默认回蓝色但是从Orange复制它默认为橙色。

我已设法设置以下内容,将格式重置为其原始蓝色默认值(这是当前通过按下按钮进行调试)。

Range(MyRange1).Select


Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
    "=LEN(TRIM(D2))=0"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
    .PatternColorIndex = xlAutomatic
    .ThemeColor = xlThemeColorLight2
    .TintAndShade = 0.599963377788629
End With
Selection.FormatConditions(1).StopIfTrue = False

我的问题是最终我想将其链接到工作表更改以允许复制和粘贴。但每次运行时,它都会在规则中创建条件格式的重复版本。

所以我需要删除以前存在的条件的任何其他实例,否则它们会加班加点。

我知道这将是一个IF / THEN声明,但对于我的生活,我想不出如何测试它。

我此刻有严厉的作家封锁所以我真的希望这是有道理的!

答案

这将循环遍历MyRange1中应用的所有条件格式,并删除任何不是优先级的格式。

For Each f In MyRange1.FormatConditions
    If f.Priority <> 1 Then f.Delete
Next

对不起,您注意到您使用MyRange1作为范围地址,因此您可以使用:

For Each f In Range(MyRange1).FormatConditions
    If f.Priority <> 1 Then f.Delete
Next
另一答案

您是否可以删除旧条件,然后在每次复制和粘贴时恢复它们?

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Source As Range)

Range("A1:A100").Select

With Selection.FormatConditions.Delete
End With

Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
    "=LEN(TRIM(D2))=0"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
    .PatternColorIndex = xlAutomatic
    .ThemeColor = xlThemeColorLight2
    .TintAndShade = 0.599963377788629
End With
Selection.FormatConditions(1).StopIfTrue = False
End Sub

以上是关于检测范围内的条件格式的主要内容,如果未能解决你的问题,请参考以下文章

检测片段内的 ViewPager 选项卡更改

使用单元格值范围内的条件运行 SQL 查询列表

是否有条件格式化自定义公式,在该公式中,我可以检查两个或多个单元格(来自该范围)是否总和成一个值?

VBA 突出显示边界条件外范围内的单元格

SQL 如何查询日期在一定范围内的数据

选择日期范围,根据关闭条件计算范围内的多条记录,按班次分组