我正在尝试将列从一个工作表复制到另一个工作表。为了避免'选择',我编写了像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
为什么上面的代码给出错误并且有更有效的方法将大块数据从一个工作表复制并粘贴到另一个工作表的任何建议。
答案 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