0

我有这个 VBA 代码,它在我的工作表上成对应用条件格式。我的意思是,它会查找来自 BC、DE、FG 等的重复项。问题是它对整个专栏都这样做,它真的减慢了我的工作表

当我检查此代码生成的规则时,例如列 B 和 D,它适用于:=$B$1:$C$87,$B$89:$C$1048576。跳过第 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
4

2 回答 2

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
.....
于 2013-06-25T21:38:29.373 回答
0

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

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

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

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

这应该加快你的代码。

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

  1. 将 Application.ScreenUpdating 设置为 False
  2. 将 Application.Calculation 设置为 xlCalculationManual

希望能帮助到你!

CompleteITPro

于 2013-06-25T21:32:30.440 回答