粘贴特殊代码

时间:2016-12-29 09:23:09

标签: excel-vba vba excel

Public Sub CopyPaste()

Dim j As Long

For j = 2 To 52
        Range("AE" & j).Select
        Selection.Copy
        Range("AE" & j).Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

        Range("AF" & j).Select
        Selection.Copy
        Range("AF" & j).Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

        Range("AG" & j).Select
        Selection.Copy
        Range("AG" & j).Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

        Application.CutCopyMode = False
    End If
Next j

End Sub

有没有办法让这个代码最小化。我尝试过使用Range(" AE:AG"& j)。选择,但显示出一些错误。

2 个答案:

答案 0 :(得分:1)

是的,确实如此。 如果只想粘贴值,则可以等于范围值。但是你需要使用单元格和精确的工作表对象。例如

Public Sub CopyPaste()
    Dim ws As Worksheet

    Set ws = ActiveSheet

    ws.Range(ws.Cells(2, 31), ws.Cells(52, 34)).Values = _ 
    ws.Range(ws.Cells(2, 31), ws.Cells(52, 34)).Values

    Set ws = Nothing
End Sub

答案 1 :(得分:0)

最好避免使用SelectCopyPaste。你几乎总能在他们的位置使用.Value = ...

假设这是你想要做的(你的问题并不是很清楚),如果你想用它的值替换一个配方细胞,你可以将它的值设置为自己:

Sub RemoveFormulas()

With ActiveSheet
    .Range(.Cells(2, 31), .Cells(52, 34)).Value = _ 
    .Range(.Cells(2, 31), .Cells(52, 34)).Value
End With

End Sub