在 Excel 2016 中,如何插入表格行而不破坏条件格式?

在 Excel 2016 中,如何插入表格行而不破坏条件格式?

为了复制表格行,我使用了这段与热键绑定的出色宏代码(在此处学到):

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。

相关内容