VBA复制数据至新工作簿时生成两个工作簿的问题求助
问题分析与解决方案
嗨,我来帮你排查下问题所在~你的代码之所以会生成两个工作簿,核心原因是两行代码都在创建新工作簿:
ThisWorkbook.Sheets(2).Copy:这行代码本身就会自动生成一个新的工作簿,并且把原工作簿的Sheet2完整复制进去;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
相关产品推荐
相关产品推荐

