VBA实现工作表数据复制到现有工作表,或保留新表删除其余工作表
针对需求的VBA实现方案
方案1:直接将源数据插入到现有空工作表
如果AutoBE.xlsm的Sheet1是空的,可以直接复制源工作表的所有数据到目标表,无需新建工作表:
Sub CopyDataToExistingSheet() Dim wb1 As Workbook Dim wb2 As Workbook Dim sourceSheet As Worksheet Dim targetSheet As Worksheet Set wb1 = Workbooks("TestData.xlsm") Set wb2 = Workbooks("AutoBE.xlsm") Set sourceSheet = wb1.Sheets("Sheet1") Set targetSheet = wb2.Sheets("Sheet1") ' 清空目标表(空表可省略此步骤) targetSheet.Cells.Clear ' 复制源表已使用区域到目标表起始位置 sourceSheet.UsedRange.Copy Destination:=targetSheet.Range("A1") End Sub
UsedRange会自动识别源表中有数据的有效区域,避免复制冗余空白行/列- 若目标表确认是空表,
targetSheet.Cells.Clear可直接删除
方案2:生成新工作表后删除其他所有工作表
按原逻辑生成新工作表后,删除AutoBE.xlsm中除新建工作表外的所有表:
Sub CopySheetAndDeleteOthers() Dim wb1 As Workbook Dim wb2 As Workbook Dim newSheet As Worksheet Dim ws As Worksheet Set wb1 = Workbooks("TestData.xlsm") Set wb2 = Workbooks("AutoBE.xlsm") ' 复制工作表并获取新建表对象 wb1.Sheets("Sheet1").Copy After:=wb2.Sheets("Sheet1") Set newSheet = wb2.Sheets(wb2.Sheets.Count) ' 新建表位于最后一位 ' 关闭删除确认提示 Application.DisplayAlerts = False ' 遍历删除非新建表 For Each ws In wb2.Sheets If ws.Name <> newSheet.Name Then ws.Delete End If Next ws ' 恢复系统提示 Application.DisplayAlerts = True End Sub
- 必须设置
Application.DisplayAlerts = False,否则删除时会弹出确认框中断代码 - 遍历过程会自动保留新建工作表,确保工作簿不会出现无表状态
内容的提问来源于stack exchange,提问作者daniel stafford
相关产品推荐
相关产品推荐

