Vba 防止条件格式更改应用范围

Vba 防止条件格式更改应用范围,vba,excel,Vba,Excel,我正在使用此代码将以-A和-B结尾的工作表复制/粘贴到一张工作表目标工作表: Sub Merge_AllSheets_into_One() Dim Sheet As Worksheet Dim TargetRow As Long 'Application.ScreenUpdating = True Sheets("Target Sheet").Range("A3:FN10000").Cells.clear Application.Calculation = xlCa

我正在使用此代码将以-A-B结尾的工作表复制/粘贴到一张工作表
目标工作表

Sub Merge_AllSheets_into_One()
   Dim Sheet As Worksheet
   Dim TargetRow As Long
   'Application.ScreenUpdating = True
   Sheets("Target Sheet").Range("A3:FN10000").Cells.clear
   Application.Calculation = xlCalculationManual
   Application.ScreenUpdating = False

   TargetRow = 3
   For Each Sheet In ActiveWorkbook.Sheets
      If Sheet.Name Like "*" & strSearch & "-A" Or _
         Sheet.Name Like "*" & strSearch & "-B" Then
         Sheets(Sheet.Name).Range("AA3:GN90").Copy
         With Worksheets("Target Sheet").Cells(TargetRow, 1)
            .PasteSpecial Paste:=xlPasteValues
            .PasteSpecial Paste:=xlPasteFormats
         End With
         TargetRow = TargetRow + 88
      End If
   Next
   Application.CutCopyMode = False

End Sub

复制的数据在不同的工作表中具有相同的大小和范围。
问题在于,
目标工作表
包含大量条件格式规则,这些规则在每次合并时都会更改。
也就是说,每次我将范围合并到
目标工作表中时,它都会删除旧数据(这就是我想要的,删除或替换旧数据),并将新数据粘贴到彼此下面


如何在不更改适用于范围的条件格式的情况下将数据复制/粘贴(=合并)到
目标工作表中?

更新 实际上,我从不同纸张复制的范围是相同的,每个范围是88行
(“AA3:GN90”)
。它们包含合并单元格:合并单元格仅为每个范围的前四列

-AA3:AA90
-AB3:AB90
-AC3:AC90
四行乘四行合并到列AD
AD3:AD6
AD7:AD10
依此类推,直到AD87:AD90
复制/粘贴到目标工作表时,我希望保持这些合并单元格的原始状态,并在目标工作表中保留条件格式规则。


请注意:这些工作表中的某些单元格还包含字体着色和单元格着色。如果可能的话,我也想保留它们。如果没有,则可以忽略此条件。


有关工作表和规则的更多信息:目标工作表中有30多条条件格式规则。因此,每当我在从其他工作表导入新数据时清除单元格时,格式范围就会不断移动和更改。我不可能重写这些规则,因为出于数据控制和重复使用此VBA代码的原因,我需要为每个数据集运行此代码10次以上(数据控制原因),并查看代码的应用位置。几乎不可能花一天的时间来重写这些规则的范围。

其中一些取决于您使用的Excel版本。由于Excel 2010目前是主流版本,我将遵守该标准

如果您试图保留CF规则并应用于目标工作表上的:,则不应使用.
清除
(又称全部清除)命令。仅清除值/公式就足够了,您可以在
.PasteSpecial
中使用数字格式来覆盖现有的单元格数字格式

Sub Merge_AllSheets_into_One()
    Dim ws As Worksheet
    Dim TargetRow As Long

    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False

    'only clear the contents - CF stays and cell number formats will be overwritten
    'why clear AA:FN if you are copying AA:GN below?
    Sheets("Target Sheet").Range("A3:FN10000").Cells.ClearContents

    TargetRow = 3
    For Each ws In ActiveWorkbook.Sheets
        With ws
            If .Name Like "*" & strSearch & "-A" Or _
              .Name Like "*" & strSearch & "-B" Then
                'are there ALWAYS 88 rows to copy?
                .Range("AA3:GN90").Copy
                With Worksheets("Target Sheet").Cells(TargetRow, 1)
                    .PasteSpecial Paste:=xlPasteValuesAndNumberFormats 'this is a newer Paste Special option
                End With
                TargetRow = TargetRow + 88
            End If
        End With
    Next ws

    Application.CutCopyMode = False
    Application.ScreenUpdating = True

End Sub

这可能合适,也可能不合适,这取决于您尝试采用的格式。如果您需要除数字格式以外的任何格式,如手动单元格/行高亮显示,最好只需使用
将板岩擦干净。清除
,复制并粘贴,然后重新定义CF规则的适用范围:然后再移动到循环中的下一个工作表。

如果源数据没有条件格式,您应该考虑<代码> XLPASTATION条件格式> <代码> < /P> 考虑到您的代码,它应该是这样的:

Sub Merge_AllSheets_into_One()
   Dim Sheet As Worksheet
   Dim TargetRow As Long
   'Application.ScreenUpdating = True
   Sheets("Target Sheet").Range("A3:FN10000").Cells.clear
   Application.Calculation = xlCalculationManual
   Application.ScreenUpdating = False

   TargetRow = 3
   For Each Sheet In ActiveWorkbook.Sheets
      If Sheet.Name Like "*" & strSearch & "-A" Or _
         Sheet.Name Like "*" & strSearch & "-B" Then
         Sheets(Sheet.Name).Range("AA3:GN90").Copy
         With Worksheets("Target Sheet").Cells(TargetRow, 1)
            .PasteSpecial Paste:=xlPasteAllMergingConditionalFormats)
         End With
         TargetRow = TargetRow + 88
      End If
   Next
   Application.CutCopyMode = False

End Sub

我会尝试禁用事件。别忘了在sub的末尾重新启用它们。对不起,虽然我接受了这个问题的答案,但后来我意识到它无法保持原始单元格格式,如合并单元格和某些彩色单元格。如何使合并的单元格保持合并状态?我们可以忘记保留单元格颜色。我想我应该继续使用我原来的粘贴特殊代码
。粘贴特殊粘贴:=xlPasteValues
。粘贴特殊粘贴:=xlPasteFormats
。你怎么认为?为什么您的新代码不能工作?听起来删除并重新创建CF规则是唯一的方法。该范围内有多少条规则?它们都必须重新创建吗?(可能最好不要勾选这个答案,直到它被正确解决)最后,我想我必须接受你的答案,因为它部分是正确的。无论如何,我正在尝试使用另一个宏合并这些单元格。