首页 文章

VBA复制和粘贴代码无法正常工作

提问于
浏览
0

我试图将列从一张纸复制到另一张 . 为了避免“选择”,我编写了类似workheet.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

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

    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
    
  • 0

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

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

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

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

相关问题