2016-12-29 114 views
-2
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)。选择,但它显示一些错误。粘贴特殊代码

+0

我是否正确理解您正在复制单元格并将复制的值粘贴到相同的单元格中?如果是,我想你只是改变了单元格的格式。那是对的吗? – FDavidov

回答

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 
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