我想构建一个宏,在所选单元格下面以相同的格式插入一行。这是我到目前为止的代码:
Public Sub insertRowBelow()
ActiveCell.Offset(1).EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrAbove
End Sub
问题是:此代码仅部分传输格式。它确实对新行使用相同的背景颜色,但它不使用单元格的边框/框架。我怎样才能做到这一点?
答案 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才会在插入的单元格上放置垂直边框。
我在插入列时遇到类似(但已轮换)的情况,但复制/粘贴对我的工作簿来说太慢了(数万行,多列和复杂的格式化)。
我发现有三种解决方法不需要从源行复制格式:
确保垂直边框在插入位置上方和下方的重量,颜色和图案相同,因此Excel会在新行中复制它们。 (这是“当我这样做时会受伤”,“停止这样做!”回答。)
使用条件格式设置边框(公式为“= TRUE”)。条件格式将复制到新行,因此您最终仍然会使用border.Caveats:
插入行后,在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放在那里,因为你表示你想要格式,我假设你不想要数据;)