为了复制表格行,我使用了这段与热键绑定的出色宏代码(在此处学到):
Public Sub InsRow()
ActiveCell.Offset(1, 0).EntireRow.Insert
ActiveCell.EntireRow.Copy ActiveCell.Offset(1, 0).EntireRow
ActiveCell.Offset(1, 0).EntireRow.ClearFormats ' suggested by RajeshS below
End Sub
但是这会破坏条件格式 (CF),因为它会插入格式,并破坏 CF“适用于”信息。插入之前,CF 如下所示:
Applies to: =$A$3:$U$100
通过上面的宏在第10行插入一个新行之后,变为:
Applies to: =$A$11:$U:$11
Applies to: =$A$3:$U$10,$A$12:$U$101
如何才能复制公式和值而不破坏此条件格式?
答案1
好吧,我终于搞明白了。以下宏代码(我经常与 Shift-Ctrl-Insert 一起使用)甚至可以在表格中添加行,而不会破坏条件格式。
Public Sub InsRow()
Dim cellActive As Range
Application.ScreenUpdating = False ' Kill screen flicker
Set cellActive = ActiveCell ' Hold the entry cell for later
ActiveCell.EntireRow.Insert ' Make the new row
ActiveCell.Offset(1, 0).EntireRow.Copy ' Grab the original row now up 1
' Handle earlier versions of Excel
If Application.Version => 16 Then
' xlPasteAllMergingConditionalFormats is defined as 14
ActiveCell.EntireRow.PasteSpecial Paste:=14 '
Else
ActiveCell.EntireRow.PasteSpecial
End If
Application.CutCopyMode = False ' Release the selected row
cellActive.Offset(-1, 0).Select ' Pick the original cell position
Application.ScreenUpdating = True ' and release the screen
End Sub
我看到无数关于 CF 格式碎片化的投诉,却找不到有效的解决方案。看来这就是解决方案,我当然欢迎大家提出建议和改进。
(稍后)我刚刚提到的一个附带好处:之前对行重复的迭代在命名范围的第一行上会出现问题。它复制了该行,但新的第一行实际上超出了范围。在其他实现中,需要避免的是最后一行。此代码似乎在第一行和最后一行上运行良好。
(稍后)编辑以添加对 Excel 2016 之前的 Excel 版本的处理。现在它似乎可以追溯到 Excel 2007。