我尝试使用描述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行以上的任何单元格,它会将其复制的数据粘贴到宏中,而不会抱怨。
有什么想法吗?
答案 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