Excel VBA将数据从一个工作簿复制到另一个工作簿

时间:2016-10-17 15:52:33

标签: excel excel-vba copy-paste vba

我有一个工作簿,其中包含四个工作表,每个工作表都包含数据。我需要打开另一个工作簿并从那里复制到每个原始文件工作表中。

数据设置为表格,因此我需要保留第一行标题。

这就是我现在正在使用的内容(见下文),但我读到有更好的方法可以用这样的东西来做。

工作簿(“File1.xls”)。表格(“Sheet1”)。范围(“A1”)。复制工作簿(“File2.xls”)。表格(“Sheet2”)。范围(“A1”)< / p>

我遇到的问题是我不知道如何复制除第一行以外的所有内容。使用我正在使用的代码,我记录了一个转到单元格A2的宏,并使用CMD + SHF + END来获取所有数据。

提前感谢您提供的任何帮助。

Sub UpdateData()
'
' UpdateData Macro
Application.ScreenUpdating = False
' Clear current data.
    Sheets("ClientInfo").Select
    Rows("2:" & Rows.Count).ClearContents
    Sheets("Quotes").Select
    Rows("2:" & Rows.Count).ClearContents
    Sheets("PolicyPlanData").Select
    Rows("2:" & Rows.Count).ClearContents
    Sheets("EstimatedPremium").Select
    Rows("2:" & Rows.Count).ClearContents

'Open Data file.
    Workbooks.Open Filename:= _
        "W:\My File Cabinet\cndjrdn\BGA\ClientBio\ClientData.xls"
'Copy data into each worksheet.
Application.CutCopyMode = False
     Windows("ClientData.xls").Activate
        Application.GoTo Sheets("ClientInfo").Range("A2")
        Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
        Selection.Copy
    Windows("BGA Client Bio May2016v4.xlsx.xlsm").Activate
        Application.GoTo Sheets("ClientInfo").Range("A2")
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Range("A2").Select
    Windows("ClientData.xls").Activate
        Application.GoTo Sheets("Quotes").Range("A2")
        Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
        Selection.Copy
    Windows("BGA Client Bio May2016v4.xlsx.xlsm").Activate
        Application.GoTo Sheets("Quotes").Range("A2")
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Range("A2").Select
    Windows("ClientData.xls").Activate
        Application.GoTo Sheets("PolicyPlanData").Range("A2")
        Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
        Selection.Copy
    Windows("BGA Client Bio May2016v4.xlsx.xlsm").Activate
        Application.GoTo Sheets("PolicyPlanData").Range("A2")
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Range("A2").Select
    Windows("ClientData.xls").Activate
        Application.GoTo Sheets("EstimatedPremium").Range("A2")
        Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
        Selection.Copy
    Windows("BGA Client Bio May2016v4.xlsx.xlsm").Activate
        Application.GoTo Sheets("EstimatedPremium").Range("A2")
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Range("A2").Select
'Refresh PivotTable(s)
    ThisWorkbook.RefreshAll
'Close Data File
    Windows("ClientData.xls").Activate
        ActiveWorkbook.Close SaveChanges:=False

End Sub

1 个答案:

答案 0 :(得分:0)

尝试为要复制的表使用命名范围。如果表更改宽度或长度,则动态命名范围允许范围自动调整大小。将命名范围拖放到Excel数组中,然后将数组拖放到新位置。它比复制和粘贴要快得多,它使您可以进行所有复制而无需在工作表之间来回切换。与使用电子表格的单元格进行操作相比,在数组中处理数据和进行计算要快得多。

正如另一位顾问所言,摆脱工作表和范围的.selects。要清除范围,只需使用类似的内容:

Range("A1:Y240").ClearContents

或者使用从A1开始的宽度和高度未知的表格来执行此操作:

Sheets("ClientInfo").Range("A1").Resize(Cells(Rows.Count, "A").End(xlUp).Row, Cells(1, columns.Count).End(xlToLeft).Column).ClearContents

唯一的要求是,列A和行1从头到尾都没有空格。