VBA 复制粘贴代码无效
VBA copy and paste code not working
我正在尝试将列从一个 sheet 复制到另一个。为了避免'Select',我写了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
关于为什么上面的代码出错的任何建议,以及是否有更有效的方法将大块数据从一个 sheet 复制并粘贴到另一个。
您需要将父级 sheet 添加到范围内的范围:
MTDData.Range("A2", MTDData.Range("A2").End(xlDown)).Copy
MTDFormula.Range("H2").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
但我们可以使用 With
块并节省一些输入和 space。你也不需要 pastespecial。
With MTDData
.Range("A2", .Range("A2").End(xlDown)).Copy MTDFormula.Range("H2")
End with
复制大量值的最快方法是不使用剪贴板,而是直接复制。
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
我正在尝试将列从一个 sheet 复制到另一个。为了避免'Select',我写了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
关于为什么上面的代码出错的任何建议,以及是否有更有效的方法将大块数据从一个 sheet 复制并粘贴到另一个。
您需要将父级 sheet 添加到范围内的范围:
MTDData.Range("A2", MTDData.Range("A2").End(xlDown)).Copy
MTDFormula.Range("H2").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
但我们可以使用 With
块并节省一些输入和 space。你也不需要 pastespecial。
With MTDData
.Range("A2", .Range("A2").End(xlDown)).Copy MTDFormula.Range("H2")
End with
复制大量值的最快方法是不使用剪贴板,而是直接复制。
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