Excel VBA复制/粘贴错误

时间:2017-06-22 04:33:42

标签: excel vba excel-vba

我尝试使用描述here的方法将多个工作表中的数据合并为一个。

不同之处在于我只希望复制每个文件中的一列数据,因此我修改了我的代码:

With wsMaster
     erow = .Range("B" & .Rows.Count).End(xlUp).Row 'get the last row in column B
     '~~> Copy from the file you opened
     wsTemp.Range("A2:A" & .Rows.Count).Copy 'copy data in column A starting at row 2
     'to however long the data runs for
     '~~> Paste on your master sheet below last used row in column B
     .Range("B" & erow).Offset(1, 0).PasteSpecial xlPasteValues
End With

这适用于第一次迭代(它正确复制第一个源文件)但是当它到达第二个源文件时会抛出错误"运行时错误' 1004&#39 ;: PasteSpecial方法或Range类失败"。

在调试模式下,我尝试手动点击并按Ctrl + V复制数据,它表示范围的大小/形状不匹配。但是 - 如果我点击第2行或第2行以上的任何单元格,它会将其复制的数据粘贴到宏中,而不会抱怨。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

当您嵌套在With wsMaster内时,它意味着您在.语句中添加前缀With的所有对象都与此对象相关(wsMaster工作表)

所以,你试图寻找最后一行的第一个地方是正确的

erow = .Range("B" & .Rows.Count).End(xlUp).Row 'get the last row in column B

但是,您尝试从其他工作表(来自wsTemp工作表)进行复制的第二位是不正确的。以下一行:

wsTemp.Range("A2:A" & .Rows.Count).Copy 'copy data in column A starting at row 2

表示.Rows.Count正在查找wsMaster表(而不是wsTemp)中的行数。

因此您需要将该行更改为:

wsTemp.Range("A2:A" & wsTemp.Rows.Count).Copy

我更喜欢以下语法来复制列“A”中的所有已占用单元格:

wsTemp.Range("A2:A" & wsTemp.Cells(wsTemp.Rows.Count, "A").End(xlUp).Row).Copy

答案 1 :(得分:0)

wsTemp.Range("A2:A" & .Rows.Count).Copy

此行导致问题,请将此更改为

wsTemp.Range("A2:A" & Range("A2").SpecialCells(xlCellTypeLastCell).Row).Copy