Excel VBA复制/粘贴错误

我试图将来自多个工作表的数据合并为一个,使用这里描述的方法。

所不同的是我只想从每个文件复制一列数据,所以我修改了我的代码:

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':PasteSpecial方法或范围类失败”。

在debugging模式下,我尝试手动点击和Ctrl + V复制的数据,它说,范围的大小/形状不匹配。 但是,如果我点击第2行以上的任何单元格,它将粘贴在macros中的数据粘贴起来,而不会抱怨。

有任何想法吗?

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

这条线路引起问题,请给这个问题

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

当你嵌套在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