如何用VBA将关闭工作簿的工作表覆盖复制到已有工作表?
解决VBA复制工作表内容到现有工作表(不新建)的问题
你的原代码使用Copy方法复制整个工作表,这会自动在目标工作簿中新建工作表,不符合需求。要实现将关闭工作簿的工作表内容覆盖到已打开工作簿的现有工作表,需要复制单元格区域而非整个工作表,具体修改如下:
修改后的代码
Sub COPYSHEET() Dim wbTarget As Workbook Dim wbSource As Workbook Dim wsSource As Worksheet Dim wsTarget As Worksheet Application.ScreenUpdating = False ' 指定目标工作簿(已打开的Book2) Set wbTarget = ActiveWorkbook ' 指定目标工作表为Book2中的Sheet2 Set wsTarget = wbTarget.Sheets("Sheet2") ' 打开源工作簿Book1 Set wbSource = Workbooks.Open("C:\Users\user1\Downloads\Book1.xlsx") ' 指定源工作表为Book1中的Sheet1 Set wsSource = wbSource.Sheets("Sheet1") ' 清空目标工作表原有内容(如需完全覆盖则保留,否则可删除此行) wsTarget.Cells.Clear ' 复制源工作表的已使用区域到目标工作表的A1起始位置 wsSource.UsedRange.Copy Destination:=wsTarget.Range("A1") ' 关闭源工作簿,不保存更改 wbSource.Close SaveChanges:=False Application.ScreenUpdating = True End Sub
关键说明
- 替换复制对象:放弃复制整个工作表的
wbSource.Sheets(1).Copy,改用wsSource.UsedRange.Copy复制源表的已使用单元格区域,避免新建工作表。 - 指定目标位置:通过
Destination:=wsTarget.Range("A1")直接将内容粘贴到目标工作表的起始位置,实现覆盖效果。 - 清空原有内容:
wsTarget.Cells.Clear用于完全清除目标表的旧内容,如果只需要覆盖对应区域(比如源表内容和目标表区域一致),可以删除此行。 - 错误预防(可选):如果担心目标工作表不存在,可以添加判断逻辑:
On Error Resume Next Set wsTarget = wbTarget.Sheets("Sheet2") On Error GoTo 0 If wsTarget Is Nothing Then MsgBox "目标工作表Sheet2不存在!" Exit Sub End If
内容的提问来源于stack exchange,提问作者Allan Mapaliey
相关产品推荐
相关产品推荐

