首页 > 解决方案 > Selection.copy 然后仅使用公式插入行

问题描述

我试图仅Formula在 Excel 中选择一个单元格后插入一个新行。

这就是我想要做的

Sub InsertNewRow()
    ActiveCell.EntireRow.Select
    Selection.Copy
    Selection.Insert Shift:=xlDown
    Application.CutCopyMode = False
End Sub

上面代码的结果是插入一个新行,但所有值和公式都已复制。有没有办法删除所有值并只保留公式?

编辑

遵循@Tom 的建议,我明白了

ActiveCell.EntireRow.Select
Selection.Insert
Selection.Offset(1, 0).EntireRow.Copy
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False

但它仍然复制所有的值和公式,有没有办法只复制公式并删除值?

标签: excelvba

解决方案


请测试下一个代码。无需在代码中选择...

Sub InsertNewRow()
   Dim rng As Range, cel As Range

    Set rng = Range(ActiveCell, Cells(ActiveCell.row, Cells(ActiveCell.row, Columns.Count).End(xlToLeft).Column))
    rng.Copy
    ActiveCell.EntireRow.Insert Shift:=xlDown
    For Each cel In rng
        If Not cel.HasFormula Then cel.ClearContents
    Next
End Sub

编辑:和下一个变体(更短,更优雅,因此......):

Sub InsertNewRow()
   Dim rng As Range

    Set rng = Range(ActiveCell, Cells(ActiveCell.row, Cells(ActiveCell.row, Columns.Count).End(xlToLeft).Column))
    rng.Copy
    ActiveCell.EntireRow.Insert Shift:=xlDown
    rng.SpecialCells(xlCellTypeConstants).ClearContents
End Sub

推荐阅读