防止整个工作表上的条件格式

时间:2013-06-25 21:05:04

标签: excel vba excel-vba conditional-formatting

我有这个VBA代码,它在我的工作表中成对应用条件格式。我的意思是,它寻找来自BC,DE,FG等的重复。问题是它为整个列执行此操作并且它确实减慢了我的工作表

当我检查此代码生成的规则时,例如B列和D列,它适用于:= $ B $ 1:$ C $ 87,$ B $ 89:$ C $ 1048576。跳过ROW 88的原因是因为我在这一行有总计并删除了所有规则。有没有办法改变这个代码,所以它只适用于87行以上而不是整张表?现在它正在大幅放缓。

Sub findDups()
Dim startCell As Range
Dim formatCols As Range

Set startCell = ActiveCell

Do
    Set formatCols = startCell.Resize(1, 2).EntireColumn

    formatCols.FormatConditions.AddUniqueValues
    formatCols.FormatConditions(formatCols.FormatConditions.Count).SetFirstPriority
    formatCols.FormatConditions(1).DupeUnique = xlDuplicate
    With formatCols.FormatConditions(1).Font
        .Color = -16383844
        .TintAndShade = 0
    End With
    With formatCols.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 13551615
        .TintAndShade = 0
    End With

    Set startCell = startCell.Offset(0, 2)

Loop Until startCell.Column >= 26

End Sub

2 个答案:

答案 0 :(得分:1)

您只需要更改formatCols (这很奇怪,我在代码中看不到任何避免第88行的内容)

...
Application.ScreenUpdating = False
Set startCell = ActiveSheet.Range("B1")

Do
    Set formatCols = startCell.Worksheet.Range(startCell, startCell.Offset(86, 1))

    ...
Loop Until ....

Application.ScreenUpdating = True
.....

答案 1 :(得分:0)

我用来限制所选范围的一种方法是找到列中的最后一个单元格。 你在哪里使用这段代码:

Set formatCols = startCell.Resize(1, 2).EntireColumn

我会将其更改为使用Range对象:

  1. 声明一个新的Range对象并将其设置为您希望格式化的列
  2. 找到该列中的最后一个值(如果它是87,可以使用,否则你可以使用startCell.End(xlDown)
  3. 设置新的Range变量以使用此单元格的范围
  4. 使用“范围”值将格式应用于
  5. 这可以加快你的代码。

    您还可以尝试一些额外的事情:

    1. 将Application.ScreenUpdating设置为False
    2. 将Application.Calculation设置为xlCalculationManual
    3. 希望它有所帮助!

      CompleteITPro