2016-12-29 122 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