【问题标题】:Runtime error '1004' : You cant past this here cause the Copy area and past area arent the same size运行时错误“1004”:您无法在此处跳过,因为复制区域和粘贴区域的大小不同
【发布时间】:2019-12-11 14:55:13
【问题描述】:

我有一个宏,它从第一张纸上的 A 列复制数字列表,然后从第二张纸上 A 列的第一个空白单元格开始粘贴它。

Sheets("TNF").Select
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy

Sheets("TNF Check").Select
Range("A1").End(xlDown).Offset(1, 0).Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

基本上,它使用 CTRL+SHIFT+Down 功能从 A2 向下选择所有内容。 当有多个单元格要复制时,它可以正常工作。但是当只有一个单元格时,它会抓取整个 A 列(1048576 个单元格)并尝试将其全部粘贴到不适合的第二张表上(数据已经存在)。 如何更新代码以不抓取整列,而只抓取实际包含数据的单元格?

【问题讨论】:

  • 请参阅this question,了解在 A 列中查找最后一个空白单元格的“正确”方法。

标签: vba runtime-error multiple-columns selection copy-paste


【解决方案1】:

使用 xlup:

Sheets("TNF").Range("A2",Sheets("TNF").Range("A" & Rows.Count).End(xlup)).Copy
Sheets("TNF Check").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues

或者只需要值时最好避免使用剪贴板:

Dim rng as Range
Set rng = Sheets("TNF").Range("A2",Sheets("TNF").Range("A" & Rows.Count).End(xlup)).Value
Sheets("TNF Check").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Resize(rng.Rows.Count,1).Value = rng.Value

【讨论】:

    【解决方案2】:

    我们可以像这样添加一个简单的逻辑。

    替换:

    Range("A2").Select
    Range(Selection, Selection.End(xlDown)).Select
    

    有了这个:

    If Range("A3").Value = "" Then
        Range("A2").Select
    Else
        Range(Range("A2"), Range("A2").End(xlDown)).Select
    End If
    

    【讨论】:

    • 这个其实不推荐。此处无需Select
    • 我只是给出一个解决方案,并没有过多地改变他的原始代码。
    猜你喜欢
    • 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
    相关资源
    最近更新 更多