在 Excel VBA 中复制 "Applies to" 范围的条件格式

Copy Conditional Formatting with "Applies to" range in Excel VBA

场景:我有一个现有的工作簿,其条件格式 (CF) 应用于所有 sheet。 CF 应用于几列(减去 header 行),例如,"Applies to:" 范围设置为 =$A$2:$I$1048576。工作簿已填满大约 30 sheet 秒的数据。

问题:我需要更新工作簿中的所有 CF。为此,我将第一个 sheet 上的 CF 更新为新的 CF。然后我写了一个简单的 VBA 宏来将更新后的 CF 应用于所有其他 sheet,而不是 sheet-by-sheet 更新每个 sheet 上的所有 CF。我的代码运行良好,但有一个例外。它不会复制条件格式的 "Applies to:" 字段。

我只是复制第一行数据的格式,因为每个 sheet 的数据行数不同。在每个 sheet 的最后一行数据下方是 CF 键(向用户显示 CF 生成的行颜色的含义)。

我已经彻底搜索过了,找不到解决这个问题的方法。

下面是我的代码。我该如何解决这个问题?

Sub CondFormatting()
'
' CondFormatting Macro
'

    Dim WS_Count As Integer
    Dim i As Integer

    WS_Count = ActiveWorkbook.Worksheets.Count

    Sheets(1).Range("A2:I2").Copy

    For i = 2 To WS_Count
        Sheets(i).Cells.FormatConditions.Delete
        Sheets(i).Range("A2:I2").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
    Next i

    Application.CutCopyMode = False
End Sub

谢谢。

** 更新 **

感谢下面 Jeffery 的回复,我能够解决我遇到的条件格式范围问题。对于那些有类似问题的人,下面是我修改后的代码,它将格式从一个 Table 复制并应用到整个工作簿中的另一个。

Sub CondFormatting()
'
' CondFormatting Macro
'

    Dim WS_Count As Integer
    Dim i As Integer

    WS_Count = ActiveWorkbook.Worksheets.Count

    Sheets(1).Range("A2").ListObject.DataBodyRange.Copy

    For i = 2 To WS_Count
        Sheets(i).Cells.FormatConditions.Delete
        Sheets(i).Range("A2").ListObject.DataBodyRange.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
    Next i

    Application.CutCopyMode = False

End Sub

此致。

'Applies To' 范围由 selection 在您创建(或在您的情况下复制)CF 规则时激活。因此,如果您希望 'Applies To' 引用范围 =$A$2:$I$1048576,那么在应用条件格式之前,您需要 select 每个 sheet 中的整个范围。

也就是说,将 CF 应用于整个列对我来说似乎有点过分了。最好将每个 sheet 上的每个数据区域更改为 Excel Table(又名 ListObject),因为它们会随着您的数据增长和缩小,应用的任何条件格式也会如此。