首页 文章

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

提问于
浏览
0

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

数据设置为表格,因此我需要保留第一行 Headers .

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

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

我遇到的问题是我不知道如何复制除第一行以外的所有内容 . 使用我正在使用的代码,我记录了一个宏,它转到单元格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

    尝试对要复制的表使用命名范围 . 动态命名范围允许范围在表更改宽度或长度时自动调整大小 . 将命名区域拖放到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行从头到尾都没有空格 .

相关问题