【问题标题】:VBA copy and paste code not workingVBA复制和粘贴代码不起作用
【发布时间】:2018-02-09 22:55:30
【问题描述】:

我正在尝试将列从一张纸复制到另一张纸。为了避免“选择”,我编写了类似 worksheet.range.copy 的代码。出于某种原因,下面的代码给了我错误。如果我将 Range("A2").End(xlDown) 替换为“A100”,那么代码将起作用。

Sub CopyData()

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

End Sub

任何建议为什么上面的代码会出错,是否有更有效的方法可以将大量数据从一张纸复制并粘贴到另一张纸上。

【问题讨论】:

  • 行数太容易搞砸了。有关检查空单元格或奇异值的可重用函数,请参阅我的答案。在您的情况下,您的代码中的错字已用MTDData.Range("A2", MTDData.Range("A2").End(xlDown)).Copy 修复
  • 知道了。你能告诉我下面的代码有什么问题吗 MTDData.Range(Cells(2, 10), Cells(CellsCount, 10)).Copy
  • Cells() 假定为 ActiveWorksheet。我建议仅在 Range() 对象之后使用 .Cells()。就像MTData.Range("A2").Cells(2,10) 一样,它从A2 开始获得第二行和第10 列。要获取多个单元格(如整个列或整个表格),请使用 .Resize(nrows,ncols) 方法。

标签: excel copy-paste vba


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    但我们可以使用With 块并节省一些打字和空间。你也不需要 pastespecial。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多