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
9
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
4 回答
最简单的选择是使用Excel复制/粘贴 .
这就是我使用的 . 经过测试和工作,
谢谢,
插入行时,无论CopyOrigin如何,如果插入位置上方和下方的边框相同,Excel将仅在插入的单元格上放置垂直边框 .
我正在遇到插入列的类似(但已旋转)的情况,但复制/粘贴对我的工作簿来说太慢了(数万行,多列和复杂格式) .
我发现三个解决方法不需要从源行复制格式:
确保垂直边框在插入位置的上方和下方具有相同的重量,颜色和图案,因此Excel将在新行中复制它们 . (这就是“当我这样做时会伤害”,“停止这样做!”回答 . )
使用条件格式设置边框(公式为"=TRUE") . 条件格式将被复制到新行,因此您仍然以border.Caveats结束:
条件格式边框仅限于细线条 .
最适用于边框相对一致的工作表,因此您不必创建一堆条件格式设置规则 .
插入行后,在VBA中设置插入行的边框 . 在范围上设置边框要比复制和粘贴所有格式要快得多,以获得边框(假设您提前知道边框应该是什么,或者可以从上面的行中对其进行采样而不会丢失性能) .
好吧,使用宏记录,并手动完成,我最终得到了这个代码..这似乎工作..(虽然它不像你的一个班轮;)
(我把ClearContents放在那里,因为你表示你想要格式,我假设你不想要数据;))