VBA复制指定工作表生成独立工作簿时多余复制原工作簿如何解决
问题根源
你代码里的多余副本是冗余的NewWindow逻辑和错误的窗口关闭位置导致的,原代码中创建临时窗口的操作完全不需要,且窗口关闭放在工作表遍历循环内会引发引用混乱,出现多余的原工作簿副本。
修改后的代码
Private Sub CommandButton1_Click() ' 定义要导出的工作表名称数组,方便后续修改 Dim exportSheetNames As Variant exportSheetNames = Array("REQUESTOR", "PROCUREMENT", "Request", "LISTS", "Copy") Dim ws As Worksheet Dim newWorkbook As Workbook Application.ScreenUpdating = False ' 先把要导出的工作表取消隐藏 For Each ws In ThisWorkbook.Sheets(exportSheetNames) ws.Visible = xlSheetVisible Next ws ' 直接复制指定工作表生成新工作簿,捕获新工作簿对象避免引用混乱 ThisWorkbook.Sheets(exportSheetNames).Copy Set newWorkbook = ActiveWorkbook ' 对新工作簿的所有工作表做公式+数字格式粘贴 For Each ws In newWorkbook.Worksheets With ws.UsedRange .Copy .PasteSpecial xlPasteFormulasAndNumberFormats End With Next ws ' 清理剪切板和状态 Application.CutCopyMode = False Application.ScreenUpdating = True End Sub
核心修改点
- 移除了完全冗余的原工作簿临时窗口创建逻辑,从根源上避免多余副本生成
- 显式捕获导出生成的新工作簿对象,不再依赖
ActiveWorkbook隐式引用,避免引用错乱 - 把工作表取消隐藏的逻辑改为遍历导出数组自动处理,不需要逐个手写,后续新增导出工作表仅需要修改数组即可
- 完全删除了错误放在循环内的窗口关闭语句,清理所有无效逻辑
内容的提问来源于stack exchange,提问作者Ted
相关产品推荐
相关产品推荐

