将一个电子表格的内容复制到另一个

时间:2021-04-14 09:42:39

标签: excel vba copy spreadsheet

我有 2 个不同的 excel 文件,存储在 C:\Test:

  1. Book1.xlsx,带有 Sheet1(Sheet1 中的数据在变化,不是恒定的数据范围,但总是从 A1 单元格开始)
  2. Book2.xlsm,带 Sheet2(空)

每次打开Book2后,需要将Book1的Sheet1中的数据自动复制到Book2的Sheet2中。

更新: 我尝试了以下 vba 代码(从 Excel 论坛在线研究)

     Private Sub Workbook_Open()

     Application.EnableEvents = False
     Dim swb As Workbook, Lr As Long, LC As Long, sws As Worksheet
     Dim dCell As Range, srg As Range, dwb As Workbook, dws As Worksheet
     Set swb = Workbooks.Open("C:\Test\AAA\Book1.xlsx")
     Set sws = swb.Worksheets("Sheet1")
     Lr = sws.Cells(Rows.Count, 1).End(xlUp).Row
     LC = sws.Cells(1, Columns.Count).End(xlToLeft).Column
     Set srg = sws.Range(Cells(1, 1), Cells(Lr, LC))
     Set dwb = ThisWorkbook
     Set dws = dwb.Worksheets("Sheet2")
     Set dCell = dws.Range("A1")
     srg.Copy dCell
     swb.Close SaveChanges:=False
     dwb.Save
     Application.EnableEvents = True

    End Sub

但是,问题是 - 如果我从 Book1 的 Sheet1 中的第 1 个记录之后删除一些记录,那么 - 这些删除的记录仍然出现在 Book2 的 Sheet2 中!

我不擅长 vba,这只是我整个项目的一部分 抱歉这些问题

更新 2:

当我在 Sheet1、Book1 中有以下内容时:

enter image description here

然后,在打开 Sheet2、Book2 后,我看到(这是正确的,是我所期望的):

enter image description here

但是,如果我要删除 Sheet1、Book1 中的记录(从第二个开始):

enter image description here

然后,在打开 Sheet2、Book2 后,我仍然会看到那些从 Book2 记录中删除的内容(虽然我希望它们消失):

enter image description here

2 个答案:

答案 0 :(得分:1)

当目标工作表的数据多于源工作表时,您需要在复制数据之前清除它。你可以用 Range-method ClearContents:

Set dws = dwb.Worksheets("Sheet2")
dws.Usedrange.ClearContents
Set dCell = dws.Range("A1")
srg.Copy dCell

由于您似乎在复制整个工作表的数据,因此另一种方法是删除 ThisWorkbook 中的工作表并复制工作表本身:

' Delete Sheet2 (if present)
On Error Resume Next
Application.DisplayAlerts = False
ThisWorkbook.Sheets("Sheet2").Delete
Application.DisplayAlerts = True
On Error GoTo 0

' Copy Sheet from sourceWorkbook
sws.Copy after:=ThisWorkbook.Sheets(1)
ActiveSheet.Name = "Sheet2" ' Copied sheet gets the active sheet automatically.

答案 1 :(得分:1)

清除复制数据下方的范围

Private Sub Workbook_Open()

    Application.EnableEvents = False

    Dim swb As Workbook, sws As Worksheet, srg As Range, LR As Long, LC As Long
    Dim dwb As Workbook, dws As Worksheet, dCell As Range

    Set swb = Workbooks.Open("C:\Test\AAA\Book1.xlsx")
    Set sws = swb.Worksheets("Sheet1")
    LR = sws.Cells(sws.Rows.Count, 1).End(xlUp).Row
    LC = sws.Cells(1, sws.Columns.Count).End(xlToLeft).Column
    Set srg = sws.Range(sws.Cells(1, 1), sws.Cells(LR, LC))

    Set dwb = ThisWorkbook
    Set dws = dwb.Worksheets("Sheet2")
    Set dCell = dws.Range("A1")

    srg.Copy dCell
    
    With dCell.Resize(, srg.Columns.Count)
        .Resize(.Worksheet.Rows.Count - .Row - srg.Rows.Count + 1) _
            .Offset(srg.Rows.Count).Clear
    End With
    
    swb.Close SaveChanges:=False
    dwb.Save

    Application.EnableEvents = True

End Sub
相关问题