我正在尝试使用VBA将一个工作表复制到另一个工作簿。但是,当涉及到复制行时,我收到了应用程序定义或对象定义错误。
Dim x As Workbook
Set x = Workbooks.Open("S:\INM\MME9EG\Zahlenwerk MMA2EG Equities\DHN\DHN_Europa.xls")
x.Sheets("Bericht_799026").Range("B4:IV150000").Copy _
ThisWorkbook.Sheets("DHN Europe 799026").Range("A1:IV150000").PasteSpecial
答案 0 :(得分:3)
您的配方有什么问题:
x.Sheets("Bericht_799026").Range("B4:IV150000").Copy _
ThisWorkbook.Sheets("DHN Europe 799026").Range("A1:IV150000").PasteSpecial
您正在使用Destination
为Copy
方法指定_
但是您使用PasteSpecial
因此它不再是范围,因此错误!
此外,您正在打开.xls
文件,该文件是旧 Excel格式,仅包含65,536行,您尝试复制150,000行!
请参阅:https://superuser.com/a/366473/505550
有很多方法可以做到这一点:
如果指定输出大小,则必须准确,以便输入和输出大小相同:
x.Sheets("Bericht_799026").Range("B4:IV65536").Copy
ThisWorkbook.Sheets("DHN Europe 799026").Range("A1:IU65533").PasteSpecial
或
x.Sheets("Bericht_799026").Range("B4:IV65536").Copy _
ThisWorkbook.Sheets("DHN Europe 799026").Range("A1:IU65533")
或者您可以指定要粘贴的第一个单元格:
x.Sheets("Bericht_799026").Range("B4:IV65536").Copy
ThisWorkbook.Sheets("DHN Europe 799026").Range("A1:IU65533").PasteSpecial
或
x.Sheets("Bericht_799026").Range("B4:IV65536").Copy _
ThisWorkbook.Sheets("DHN Europe 799026").Range("A1")
或者结束的最佳方式:
您必须准确,但传输数据(仅限数据!)的速度要快得多:)
ThisWorkbook.Sheets("DHN Europe 799026").Range("A1:IU65533").Value = _
x.Sheets("Bericht_799026").Range("B4:IV65536").Value
答案 1 :(得分:1)
不要打扰匹配源和目标范围大小
With x.Sheets("Bericht_799026").Range("B4:IV150000")
.Value = ThisWorkbook.Sheets("DHN Europe 799026").Range("A1").Resize(.Rows.Count, .Columns.Count).Value
End With