【问题标题】:Excel VBA copy data from one workbook to another workbookExcel VBA 将数据从一个工作簿复制到另一个工作簿
【发布时间】:2017-02-26 16:40:12
【问题描述】:

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

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

这是我现在正在使用的(见下文),但我读到有更好的方法来使用类似的东西。

Workbooks("File1.xls").Sheets("Sheet1").range("A1").Copy Workbooks("File2.xls").Sheets("Sheet2").range("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

【问题讨论】:

  • 你可以通过avoiding the use of .Select删除很多这些行
  • 试试 sourcerange.copy Destination := Destinationsheet.range ("A2")
  • 好的。我看看我能不能弄明白。我只是不知道如何使源范围从第 2 行开始到数据的末尾。谢谢。

标签: excel copy-paste vba


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-12-09
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多