Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用“复制条件格式”;适用于;Excel VBA中的范围_Excel_Conditional Formatting_Vba - Fatal编程技术网

使用“复制条件格式”;适用于;Excel VBA中的范围

使用“复制条件格式”;适用于;Excel VBA中的范围,excel,conditional-formatting,vba,Excel,Conditional Formatting,Vba,场景:我有一个现有工作簿,所有工作表都应用了相同的条件格式(CF)。CF应用于少数列(减去标题行),例如,“应用于:”范围设置为=$a$2:$I$1048576。工作簿中已经填充了大约30页的数据 问题是:我需要更新工作簿中的所有CF。为此,我将第一张图纸上的CF更新为新CF。然后,我编写了一个简单的VBA宏,将更新后的CF应用于所有其他图纸,以避免逐张图纸更新每张图纸上的所有CF。我的代码运行良好,只有一个例外。它不会复制条件格式的“应用于:”字段 我只是复制第一行数据的格式,因为每个工作表都

场景:我有一个现有工作簿,所有工作表都应用了相同的条件格式(CF)。CF应用于少数列(减去标题行),例如,“应用于:”范围设置为=$a$2:$I$1048576。工作簿中已经填充了大约30页的数据

问题是:我需要更新工作簿中的所有CF。为此,我将第一张图纸上的CF更新为新CF。然后,我编写了一个简单的VBA宏,将更新后的CF应用于所有其他图纸,以避免逐张图纸更新每张图纸上的所有CF。我的代码运行良好,只有一个例外。它不会复制条件格式的“应用于:”字段

我只是复制第一行数据的格式,因为每个工作表都有不同数量的数据行。每张图纸上最后一行数据的下方是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在下面的回复,我能够解决我遇到的条件格式范围问题。对于那些有类似问题的人,下面是我修改过的代码,它将格式从一个表复制到另一个表,并在整个工作簿中应用

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

致以最诚挚的问候。

当您创建(或在您的案例副本中)CF规则时,“应用于”范围由激活的选择设置。因此,如果您希望“AppliesTo”引用范围=$A$2:$I$1048576,那么在应用条件格式之前,您需要在每个工作表中选择整个范围


也就是说,对我来说,将CF应用于整个专栏似乎有些过头了。最好将每张工作表上的每个数据区域都更改为Excel表(也称为ListObject),因为这些数据区域会随着数据的增长和收缩,应用的任何条件格式也会随之增长和收缩

创建(或复制)CF规则时,“应用于”范围由激活的选择设置。因此,如果您希望“AppliesTo”引用范围=$A$2:$I$1048576,那么在应用条件格式之前,您需要在每个工作表中选择整个范围


也就是说,对我来说,将CF应用于整个专栏似乎有些过头了。最好将每张工作表上的每个数据区域都更改为Excel表(也称为ListObject),因为这些数据区域会随着数据的增长和收缩,应用的任何条件格式也会随之增长和收缩

我下面的答案有用吗?我下面的答案有用吗?谢谢Jeffrey。这应该行得通。我将尝试一下,如果这解决了我的问题,我将在这里为正在搜索现有电子表格中更新CF的解决方案的所有其他人发布最终代码。我终于有机会回到本文档并按照您的建议实施更改。它就像一个符咒。谢谢你的帮助!谢谢杰弗里。这应该行得通。我将尝试一下,如果这解决了我的问题,我将在这里为正在搜索现有电子表格中更新CF的解决方案的所有其他人发布最终代码。我终于有机会回到本文档并按照您的建议实施更改。它就像一个符咒。谢谢你的帮助!