VBA复制和粘贴代码无效

时间:2018-02-09 22:55:30

标签: excel-vba copy-paste vba excel

我正在尝试将列从一个工作表复制到另一个工作表。为了避免'选择',我编写了像worksheet.range.copy这样的代码。出于某种原因,下面的代码给了我错误。如果我替换Range(“A2”)。End(xlDown)with let say“A100”,那么代码将起作用。

Sub CopyData()

    MTDData.Range("A2", Range("A2").End(xlDown)).Copy
    MTDFormula.Range("H2").PasteSpecial Paste:=xlPasteValuesAndNumberFormats

End Sub

为什么上面的代码给出错误并且有更有效的方法将大块数据从一个工作表复制并粘贴到另一个工作表的任何建议。enter image description here

2 个答案:

答案 0 :(得分:0)

您需要将父资料表添加到范围内的范围:

MTDData.Range("A2", MTDData.Range("A2").End(xlDown)).Copy
MTDFormula.Range("H2").PasteSpecial Paste:=xlPasteValuesAndNumberFormats

但我们可以使用With块并节省一些打字和空格。此外,您不需要专用。

With MTDData
    .Range("A2", .Range("A2").End(xlDown)).Copy MTDFormula.Range("H2")
End with

答案 1 :(得分:0)

复制大量值集的最快方法是不使用剪贴板而是直接使用副本。

MTDFormula.Range("H2").Resize(n,1).Value = MTDData.Range("A2").Resize(n,1).Value

但你必须先找到细胞的大小。这是通过以下可重复使用的代码完成的:

Public Function CountRows(ByRef r As Range) As Long
    If IsEmpty(r) Then
        CountRows = 0
    ElseIf IsEmpty(r.Offset(1, 0)) Then
        CountRows = 1
    Else
        CountRows = r.Worksheet.Range(r, r.End(xlDown)).Rows.Count
    End If
End Function

所以你的复制代码看起来像这样:

Public Sub CopyValuesTest()

    Dim src As Range, dst As Range

    Set src = MTDData.Range("A2")
    Set dst = MTDFormula.Range("H2")

    Dim n As Long
    n = CountRows(src)

    dst.Resize(n, 1).Value = src.Resize(n, 1).Value
    dst.Resize(n, 1).NumberFormat = src.Resize(n, 1).NumberFormat
End Sub