将一个电子表格的内容复制到另一个电子表格
Copying content of one spreadsheet into another
我有 2 个不同的 excel 文件,存储在 C:\Test:
- Book1.xlsx,与Sheet1(Sheet1中的数据在变化,不是恒定的数据范围,但总是从A1单元格开始)
- 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
我有 2 个不同的 excel 文件,存储在 C:\Test:
- Book1.xlsx,与Sheet1(Sheet1中的数据在变化,不是恒定的数据范围,但总是从A1单元格开始)
- 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