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

Copying content of one spreadsheet into another

我有 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 中删除第一条之后的几条记录,那么 - 这些删除的记录仍然出现在 Book2 的 Sheet2 中!

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

更新 2:

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

然后,打开Sheet2、Book2后,我看到了(正确,如我所料):

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

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

当目标 sheet 的数据多于源 sheet 时,您需要先清除它,然后再复制数据。您可以使用范围方法 ClearContents:

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

您似乎是在复制整个 sheet 的数据,另一种方法是删除 ThisWorkbook 中的 sheet 并复制 sheet 本身:

' 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.

清除复制数据下方的范围

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