将工作表复制到另一个工作簿VBA

时间:2017-02-03 15:13:13

标签: excel vba excel-vba

我正在尝试使用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

2 个答案:

答案 0 :(得分:3)

您的配方有什么问题:

x.Sheets("Bericht_799026").Range("B4:IV150000").Copy _
ThisWorkbook.Sheets("DHN Europe 799026").Range("A1:IV150000").PasteSpecial

您正在使用DestinationCopy方法指定_但是您使用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