You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA复制数据至新工作簿时生成两个工作簿的问题求助

问题分析与解决方案

嗨,我来帮你排查下问题所在~你的代码之所以会生成两个工作簿,核心原因是两行代码都在创建新工作簿:

  1. ThisWorkbook.Sheets(2).Copy:这行代码本身就会自动生成一个新的工作簿,并且把原工作簿的Sheet2完整复制进去;
  2. Set wkb = Workbooks.Add:这行又额外创建了一个全新的空白工作簿。

最后你在第二个空白工作簿里执行粘贴操作,自然只有一个工作簿有数据,另一个是多余的。

下面给你两种修正方案,根据你的需求选一种就行:

方案一:利用Copy生成的工作簿(更简洁)

如果你只是想把Sheet2的内容以纯值形式放到新工作簿里,可以直接用Copy生成的工作簿,再把内容转为值:

On Error Resume Next
' 复制Sheet2,自动生成包含该工作表的新工作簿
ThisWorkbook.Sheets(2).Copy
' 获取这个新建的工作簿(此时它是激活状态)
Dim wkb As Workbook
Set wkb = ActiveWorkbook
' 将工作表内容转为纯值(覆盖原公式/格式,保留数值)
wkb.Sheets(1).UsedRange.Value = wkb.Sheets(1).UsedRange.Value
On Error GoTo 0

方案二:先新建工作簿再粘贴值(更灵活)

如果需要更灵活地控制粘贴位置或范围,可以先创建空白工作簿,再复制粘贴值:

On Error Resume Next
Dim wkb As Workbook
' 新建一个空白工作簿
Set wkb = Workbooks.Add
' 复制原工作簿Sheet2的已用数据区域
ThisWorkbook.Sheets(2).UsedRange.Copy
' 粘贴到新工作簿第一个工作表的A1单元格(仅粘贴值)
wkb.Sheets(1).Range("A1").PasteSpecial xlPasteValues
' 清除剪贴板,避免后续弹出提示
Application.CutCopyMode = False
On Error GoTo 0

两种方案都只会生成一个新工作簿,并且把Sheet2的数据以纯值形式粘贴进去~

内容的提问来源于stack exchange,提问作者Gaus Shaikh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:00:04