“xlPasteColumnwidths”出错,我的代码可以更高效吗?

时间:2017-01-03 11:16:19

标签: vba excel-vba excel

在工作簿之间复制数据的最佳方法是什么?我已经编写了下面的代码,用于将给定工作簿中的数据复制到“thisworkbook”。但是我遇到了一些问题,我开始认为这不是正确的方法吗?

我到底想要什么:

我有一个工作簿,其中有大量数据,我希望从该工作簿中复制一些给定范围到“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”收到错误,是否可以提高此代码的效率?

1 个答案:

答案 0 :(得分: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

关于性能,我看不到您的代码有任何问题。当然,你可以把整张纸拿到一个数组然后写出你需要的东西,但这对于这么简单的东西来说太过分了。