VBA Excel – 用相同的格式(包括边框和框架)插入下面的行

我想build立一个macros,以相同的格式在选定的单元格下面插入一行。 这是迄今为止的代码:

Public Sub insertRowBelow() ActiveCell.Offset(1).EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrAbove End Sub 

问题是:这段代码只是部分传输格式。 它为新行使用相同的背景颜色,但不使用单元格的边框/框架。 我怎样才能做到这一点?

最简单的select是使用Excel复制/粘贴。

 Public Sub insertRowBelow() ActiveCell.Offset(1).EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrAbove ActiveCell.EntireRow.Copy ActiveCell.Offset(1).EntireRow.PasteSpecial xlPasteFormats Application.CutCopyMode = False End Sub 
 Private Sub cmdInsertRow_Click() Dim lRow As Long Dim lRsp As Long On Error Resume Next lRow = Selection.Row() lRsp = MsgBox("Insert New row above " & lRow & "?", _ vbQuestion + vbYesNo) If lRsp <> vbYes Then Exit Sub Rows(lRow).Select Selection.Copy Rows(lRow + 1).Select Selection.Insert Shift:=xlDown Application.CutCopyMode = False 'Paste formulas and conditional formatting in new row created Rows(lRow).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone End Sub 

这是我用的。 经过testing和工作,

谢谢,

好吧,使用macroslogging,并手动做,我结束了这个代码..这似乎工作..(虽然它不是像你的一个class轮;)

 lrow = Selection.Row() Rows(lrow).Select Selection.Copy Rows(lrow + 1).Select Selection.Insert Shift:=xlDown Application.CutCopyMode = False Selection.ClearContents 

(我把ClearContents放在那里,因为你指出你想要的格式,而且我假设你不需要这些数据;))

插入行时,无论CopyOrigin如何,如果插入位置上方和下方的边框相同,则Excel将仅在插入的单元格上放置垂直边框。

我遇到了插入列的类似(但旋转)的情况,但是复制/粘贴对于我的工作簿(成千上万行,许多列和复杂的格式化)来说太慢了。

我发现了三个解决方法,不需要从源行复制格式:

  1. 确保垂直边框在插入位置上方和下方具有相同的重量,颜色和图案,以便Excel将它们复制到新的行中。 (这是“当我这样做的时候会伤害的,”“停止这样做!”的答案)

  2. 使用条件格式build立边界(公式为“= TRUE”)。 条件格式被复制到新的行,所以你仍然以border.Caveats:

    • 条件格式化边界仅限于细线。
    • 适用于边界相对一致的工作表,因此您不必创build大量的条件格式规则。
  3. 插入行后,在VBA中设置插入行的边框。 在范围上设置边框要比复制和粘贴所有格式来得到边框要快得多(假设您事先知道边框应该是什么样的,或者可以从上面的行中取样,而不会损失性能)。