VBA粘贴范围

use*_*890 6 excel vba range paste

我有一个简单的目标,即复制范围并将其粘贴到另一个范围内spreadsheet.下面code列出了副本,但不糊.

Sub Normalize()

    Dim Ticker As Range
    Sheets("Sheet1").Activate
    Set Ticker = Range(Cells(2, 1), Cells(65, 1))
    Ticker.Copy

    Sheets("Sheet2").Select
    Cells(1, 1).Activate
    Ticker.PasteSpecial xlPasteAll

End Sub
Run Code Online (Sandbox Code Playgroud)

有什么建议?

use*_*261 23

要从字面上修复您的示例,您将使用此:

Sub Normalize()


    Dim Ticker As Range
    Sheets("Sheet1").Activate
    Set Ticker = Range(Cells(2, 1), Cells(65, 1))
    Ticker.Copy

    Sheets("Sheet2").Select
    Cells(1, 1).PasteSpecial xlPasteAll



End Sub
Run Code Online (Sandbox Code Playgroud)

要做出轻微的改进就是摆脱选择和激活:

Sub Normalize()
    With Sheets("Sheet1")
        .Range(.Cells(2, 1), .Cells(65, 1)).Copy Sheets("Sheet2").Cells(1, 1)
    End With
End Sub
Run Code Online (Sandbox Code Playgroud)

但使用剪贴板需要时间和资源,因此最好的方法是避免复制和粘贴,只需将值设置为您想要的值即可.

Sub Normalize()
Dim CopyFrom As Range

Set CopyFrom = Sheets("Sheet1").Range("A2", [A65])
Sheets("Sheet2").Range("A1").Resize(CopyFrom.Rows.Count).Value = CopyFrom.Value

End Sub
Run Code Online (Sandbox Code Playgroud)

要定义CopyFrom你可以使用你要定义的范围内任何东西,你可以使用Range("A2:A65"),Range("A2",[A65]),Range("A2", "A65")都将是有效的入口.如果A2:A65永远不会改变代码,可以进一步简化为:

Sub Normalize()

Sheets("Sheet2").Range("A1:A65").Value = Sheets("Sheet1").Range("A2:A66").Value

End Sub
Run Code Online (Sandbox Code Playgroud)

我添加了"从范围复制"和Resize属性,以便在您将来想要使用其他范围时使其更具动态性.