ActiveSheet.Paste给出错误......但有时只是?替代它的用途?

时间:2017-04-30 02:16:41

标签: excel excel-vba vba

我录制了一个宏,它会过滤一张工作表,复制过滤后的数据并将其粘贴到另一个工作簿中。它在我使用它的前几次工作,现在它给了我一个错误:

  

运行时1004 - 我们无法粘贴,因为复制区域和粘贴区域   大小不一样。

没有任何改变,它现在标记“ActiveSheet.Paste”行上的错误。任何人都可以解释为什么它无处不在吗?我知道明天再次尝试它会很好用于一些用途然后再做一次。我在网上看起来似乎是一个常见问题,我还没有找到一个对我有用的解决方案,有没有人有想法?或者还有另一种方法可以做到这一点,所以我可以避免它吗?

代码:

    Sub Macro201()

    ActiveSheet.Range("$A$6:$H$55").AutoFilter Field:=8, Criteria1:="99"
    Range("A7:B7").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Windows("invoiceTEST.xls").Activate
    Range("A" & Rows.Count).End(xlUp).Offset(1).Select


    ActiveSheet.Paste


    Range("C" & Rows.Count).End(xlUp).Offset(1).Select
End Sub

1 个答案:

答案 0 :(得分:0)

首先,您不需要选择任何内容。例如,Range("A7:B7")是一个范围。 Selection也是一个范围(在此上下文中)。因此,您将范围分配给Selection.Range,然后使用Selection.Range。为什么不使用您在开始时定义的范围?

接下来,您必须指定正在处理的工作表,尤其是目标工作簿中的工作表。

最后,您必须清楚地标识您使用的最后一行。您的公式选择您使用的工作表中的最后一行,而不是最后一个使用的行。所以你扔掉了数以百万计的空白细胞。

将上述所有内容放在一起,就会得到如下代码。

Sub CopyData()
    ' 01 May 2017

    Dim Rng As Range

    With ActiveSheet
        Set Rng = .Range("$A$6:$H$55")
        Rng.AutoFilter Field:=8, Criteria1:="99"
        If Application.WorksheetFunction.Subtotal(3, Rng) = 0 Then Exit Sub
        .Range("A7:B" & .Cells(.Rows.Count, "A").End(xlUp).Row).Copy
    End With

    With Workbooks("invoiceTEST.xls").Sheets(1)
        .Cells(.Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial
    End With
End Sub

请注意,如果目标工作簿在您尝试运行时未打开,则代码将失败。