2017-01-03 218 views
0

在工作簿之间复制数据的最佳方法是什么?我已经编写了下面的代码,用于将数据从给定的工作簿复制到“本书”。然而,我正面临一些问题,我开始认为这不是正确的方法来做到这一点?“xlPasteColumnwidths”错误,我的代码可以更高效吗?

什么我到底要:

我有一个工作簿中,我有大量的数据,我想从工作簿复制到“的ThisWorkbook”一些给定的范围。之后,这些被复制我希望将数据

我有什么区别删除所有空行:

Application.ScreenUpdating = False 

Dim wb As Workbook 

Set wb = Workbooks.Open("path") 

With wb 
    Sheets("sheet1").Range("B3:D107").Copy 
End With 

With ThisWorkbook.Sheets("sheet1").Range("A1") 
    .PasteSpecial xlPasteAll 
    .PasteSpecial xlPasteColumnWidths 
End With 

With wb 
    Sheets("sheet1").Range("B113:D117").Copy 
End With 

With ThisWorkbook.Sheets("sheet1").Range("A106") 
    .PasteSpecial xlPasteAll 
    .PasteSpecial xlPasteColumnWidths 
End With 

With wb 
    Sheets("sheet1").Range("F3:F107").Copy 
End With 

With ThisWorkbook.Sheets("sheet1").Range("D1") 
    .PasteSpecial xlPasteAll 
    .PasteSpecial xlPasteColumnWidths 
End With 

With wb 
    Sheets("sheet1").Range("F113:F117").Copy 
End With 

With ThisWorkbook.Sheets("sheet1").Range("D106") 
    .PasteSpecial xlPasteAll 
    .PasteSpecial xlPasteColumnWidths 
End With 

wb.Close False 

On Error Resume Next 

Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 

Application.ScreenUpdating = True 

为什么我在“xlPasteColumnwidths得到一个错误,我可以使此代码更有效

回答

0

你不能有多个枚举在PasteSpecial的操作,你需要单独进行各项操作:

With wb 
    Sheets("sheet1").Range("B3:D107").Copy 
End With 

With ThisWorkbook.Sheets("sheet1").Range("A1") 
    .PasteSpecial xlPasteAll 
End With 

With wb 
    Sheets("sheet1").Range("B3:D107").Copy 
End With 

With ThisWorkbook.Sheets("sheet1").Range("A106") 
    .PasteSpecial xlPasteColumnWidths 
End With 

关于业绩也看不出任何问题与您的代码。当然,你可以把整张纸拿到一个数组中,然后写出你需要的数据,但这对于这么简单的事情来说可能是过度的。

+0

谢谢你的帮助,它的工作原理。也许有办法一次复制所有的范围并一次粘贴它们吗?你可以设置一个复制范围作为一个常量?那么我只会用...结束两次 – Mick17

+1

不幸的是,你不能复制非连续的范围。正如我之前提到的,您可以将整个使用范围(即B3到F117)放入一个非常快速高效的数组中,然后写出您需要的数组部分。当读取和写入单元格在计算上花费相当大(很慢)时,这是一个很好的技巧,因为读取和写入单元格的计算相当昂贵(缓慢),但是对于您想要在这里执行的操作,不值得重写代码,您可能会节省几毫秒最。 – Absinthe