2017-06-22 316 views
0

我试图将多个工作表中的数据合并为一个,使用描述的方法hereExcel 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方法或Range类失败”。

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

任何想法?

回答

0

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

此行引起问题,请chenge这

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

+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.CountwsMaster片(而不是wsTemp)寻找行的计数。

所以您需要更改该行:我更喜欢以下语法所有占用的单元格复制列“A”

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

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

谢谢谢。 'wsTemp.Range(“A2:A”&wsTemp.Rows.Count).Copy'不起作用。 但是'wsTemp.Range(“A2:A”&wsTemp.Cells(wsTemp.Rows.Count,“A”).End(xlUp).Row).Copy'确实。 我把克里斯的回答标记为答案,因为他早一点。 –

+0

@EP没关系,就你所知,使用xlCellTypeLastCell.Row可能不是获得最后一行的最可靠的方法 –