检测范围内的条件格式

时间:2018-07-30 09:57:16

标签: excel excel-vba

我一直试图在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声明,但是对于我一生来说,我无法思考如何进行测试。

我目前有严重的作家障碍,所以我真的希望这是有道理的!

2 个答案:

答案 0 :(得分:1)

这将循环遍历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

答案 1 :(得分:0)

您能删除旧条件,然后在每次复制和粘贴时恢复它们吗?

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