2014-06-11 61 views
0

當我複製並粘貼時,然後excel將單元格引用向下移動。例如。第3行上對單元格B2的引用成爲對第4行上的第B3行的引用。VBA代碼複製一個選擇就像剪切一樣,以便粘貼不會修改引用?

通過剪切和粘貼,這不會發生,並且對單元格B2的引用仍保留對B2的引用。

我希望剪切和粘貼的行爲,但不會丟失原始內容。

我試過錄制一個宏,然後按F2,SHIFT-HOME,複製和轉義,而excel記錄絕對沒有。但這是我想要宏做的事情,所以當我複製它時,它會完美地複製它。

回答

2

將下面的標準模塊中:

Dim sForm As String 

Sub ccopy() 
    sForm = ActiveCell.Formula 
End Sub 

Sub ppaste() 
    ActiveCell.Formula = sForm 
End Sub 

然後分配快捷鍵Ctrl鍵 + ëccopy和快捷鍵Ctrl鍵 + ˚Fppaste

這應該模擬複製/粘貼,但留下單元格引用完好無損。

這可以修改爲多個單元格。

編輯#1:

這個新ppaste將處理的情況下:

單細胞 - >多個單元

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

這太好了,謝謝!你將如何修改它的多個單元格?有沒有ActiveRange或類似的東西? – Eliyahu

+1

請參閱我的**編輯#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