运行时错误“1004”:您不能在此处通过它,因为复制区域和粘贴区域的大小不同

Runtime error '1004' : You cant past this here cause the Copy area and past area arent the same size

我有一个宏,它从第一个 sheet 的 A 列复制数字列表,然后将其粘贴到第二个 sheet 的 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 功能 select 从 A2 向下的所有内容。 当有多个单元格要复制时,它工作正常。但是当只有一个单元格时,它会抓取整个 A 列(1048576 个单元格)并尝试将其全部粘贴到第二个 sheet,这不适合(数据已经存在)。 我如何才能更新代码而不是抓取整列,而是只抓取实际包含数据的单元格?

使用 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

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

替换:

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