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将仅在插入的单元格上放置垂直边框。
我遇到了插入列的类似(但旋转)的情况,但是复制/粘贴对于我的工作簿(成千上万行,许多列和复杂的格式化)来说太慢了。
我发现了三个解决方法,不需要从源行复制格式:
-
确保垂直边框在插入位置上方和下方具有相同的重量,颜色和图案,以便Excel将它们复制到新的行中。 (这是“当我这样做的时候会伤害的,”“停止这样做!”的答案)
-
使用条件格式build立边界(公式为“= TRUE”)。 条件格式将被复制到新的行,所以你仍然以border.Caveats:
- 条件格式化边界仅限于细线。
- 适用于边界相对一致的工作表,因此您不必创build大量的条件格式规则。
-
插入行后,在VBA中设置插入行的边框。 在范围上设置边框要比复制和粘贴所有格式来得到边框要快得多(假设您事先知道边框应该是什么样的,或者可以从上面的行中取样,而不会损失性能)。