VBA复制多工作表到新工作簿:报错及断开链接实现问询
问题修正与代码优化
原代码核心错误点
- 多工作表赋值错误:单个
Worksheet变量无法存储多个工作表,需改用工作表数组或直接通过集合传递表名。 - 路径语法错误:
OneDrive - Consilio\savePath = "C:\Users\"是无效赋值,需将完整路径正确赋值给变量。 - 子过程嵌套非法:VBA不允许在一个Sub内部定义另一个Sub,
break_link不能嵌套在主过程里。 - BreakLink用法错误:未正确获取外部链接地址,存在拼写错误
Acitveworkbook,且未指定链接类型。
修正后的完整代码
Option Explicit Sub Copysheetandsave() Dim sourceWb As Workbook Dim targetWb As Workbook Dim savePath As String Dim externalLinks As Variant Dim i As Integer Set sourceWb = ThisWorkbook ' 用数组形式指定多个工作表,直接复制生成新工作簿 sourceWb.Worksheets(Array("215", "220")).Copy Set targetWb = ActiveWorkbook ' 修正路径赋值(根据实际路径调整) savePath = "C:\Users\OneDrive - Consilio\" ' 保存新工作簿 targetWb.SaveAs Filename:=savePath & "Global App Support 2023 YTD.xlsx" ' 断开外部链接 externalLinks = targetWb.LinkSources(xlExcelLinks) If Not IsEmpty(externalLinks) Then For i = LBound(externalLinks) To UBound(externalLinks) targetWb.BreakLink Name:=externalLinks(i), Type:=xlExcelLinks Next i End If ' 关闭新工作簿 targetWb.Close SaveChanges:=False End Sub
关键修改说明
- 多工作表复制:使用
Worksheets(Array("215", "220"))直接传递多个工作表名称数组,调用Copy方法自动生成包含指定工作表的新工作簿。 - 路径修正:将完整目标路径正确赋值给
savePath,确保文件能保存到指定位置。 - 链接断开逻辑:
- 用
LinkSources(xlExcelLinks)获取新工作簿中的所有Excel外部链接 - 遍历链接数组,逐个调用
BreakLink断开连接,同时指定链接类型为xlExcelLinks
- 用
- 避免歧义:将新生成的工作簿赋值给
targetWb变量,减少对ActiveWorkbook的依赖,提升代码稳定性。
内容的提问来源于stack exchange,提问作者Diana
相关产品推荐
相关产品推荐

