Vba 防止条件格式更改应用范围
我正在使用此代码将以-A和-B结尾的工作表复制/粘贴到一张工作表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
目标工作表:
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规则是唯一的方法。该范围内有多少条规则?它们都必须重新创建吗?(可能最好不要勾选这个答案,直到它被正确解决)最后,我想我必须接受你的答案,因为它部分是正确的。无论如何,我正在尝试使用另一个宏合并这些单元格。