VBA代码复制选择就像剪切一样,这样粘贴不会修改引用?

时间:2014-06-11 12:38:10

标签: excel vba

当我复制并粘贴时,excel会向下移动单元格引用。例如。第3行对单元格B2的引用成为对第4行第B3行的引用。

使用剪切和粘贴时,不会发生这种情况,并且对单元格B2的引用仍然是对B2的引用。

我想要剪切和粘贴的行为,但不会丢失原始内容。

我已经尝试录制宏,然后按F2,SHIFT-HOME,复制和转义,并且excel记录绝对没有。但这就是我想要宏做的事情,所以当我复制它时,它会完美地复制它。

2 个答案:

答案 0 :(得分:2)

将以下内容放入标准模块中:

Dim sForm As String

Sub ccopy()
    sForm = ActiveCell.Formula
End Sub

Sub ppaste()
    ActiveCell.Formula = sForm
End Sub

然后将快捷键 Ctrl + e 分配给 ccopy ,快捷键 Ctrl + f ppaste

这应该模拟复制/粘贴,但保持单元格引用不变。

可以修改多个单元格。

修改#1:

这个新的 ppaste 将处理以下情况:

单细胞 - >多个单元格

Sub ppaste()
    Dim r As Range
    For Each r In Selection
        r.Formula = sForm
    Next r
End Sub

答案 1 :(得分:0)

经过大量的工作,这就是我想出的:

Dim formulas() As String
Dim initCopyCol As Integer
Dim initCopyRow As Integer
Dim columns As Integer
Dim rows As Integer

Sub copyFormulaRange()

    initCopyCol = Selection.Column
    initCopyRow = Selection.row

    columns = Selection.columns.Count
    rows = Selection.rows.Count

    ReDim formulas(1 To columns, 1 To rows)

    For i = 1 To columns
        For j = 1 To rows
            formulas(i, j) = Cells(initCopyRow + j - 1, initCopyCol + i - 1).Formula
        Next j
    Next i

End Sub

Sub pasteFormulaRange()

    Dim initPasteCol As Integer
    Dim initPasteRow As Integer

    initPasteCol = Selection.Column
    initPasteRow = Selection.row

    For i = 1 To columns
        For j = 1 To rows
            Cells(initPasteRow + j - 1, initPasteCol + i - 1).Formula = formulas(i, j)
        Next j
    Next i

End Sub