簡體   English   中英

Excel VBA將數據從一個工作簿復制到另一工作簿

[英]Excel VBA copy data from one workbook to another workbook

我有一個工作簿,其中有四個工作表,每個工作表中都有數據。 我需要打開另一個工作簿,然后從那里復制到每個原始文件工作表中。

數據設置為表格,因此我需要保留第一行標題。

這就是我現在正在使用的(請參閱下文),但是我讀到有一種更好的方法可以執行此操作。

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

嘗試為要復制的表使用命名范圍。 如果表更改寬度或長度,則動態命名范圍允許范圍自動調整大小。 將命名范圍拖放到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從頭到尾都沒有空白。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM