VBA Excel - 在下面以相同的格式插入行,包括边框和框架

时间:2015-03-09 13:43:44

标签: excel vba

我想构建一个宏,在所选单元格下面以相同的格式插入一行。这是我到目前为止的代码:

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

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

4 个答案:

答案 0 :(得分:9)

最简单的选择是使用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

答案 1 :(得分:3)

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

这就是我使用的。经过测试和工作,

谢谢,

答案 2 :(得分:2)

插入行时,无论CopyOrigin如何,只有插入位置上方和下方的边框相同,Excel才会在插入的单元格上放置垂直边框。

我在插入列时遇到类似(但已轮换)的情况,但复制/粘贴对我的工作簿来说太慢了(数万行,多列和复杂的格式化)。

我发现有三种解决方法不需要从源行复制格式:

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

  2. 使用条件格式设置边框(公式为“= TRUE”)。条件格式复制到新行,因此您最终仍然会使用border.Caveats:

    • 条件格式边框仅限于轻量级线条。
    • 最适用于边框相对一致的工作表,因此您不必创建一堆条件格式规则。
  3. 插入行后,在VBA中设置插入行的边框。在一个范围上设置边框比复制和粘贴格式的所有快得多,只是为了获得边框(假设您提前知道边框应该是什么,或者可以从上面的行中对其进行采样而不是失去表现)。

答案 3 :(得分:1)

好吧,使用宏记录,并手动完成,我最终得到了这个代码..这似乎有用..(虽然它不是像你一样的单行;)

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

(我把ClearContents放在那里,因为你表示你想要格式,我假设你不想要数据;)