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

如何在VBA复制工作表时同步复制其关联的宏代码?

解决复制工作表时同步复制宏代码的问题

方法一:直接复制模板工作表(推荐)

你原来的代码是先新建空白工作表再复制内容,这种方式带不走工作表模块里的VBA事件宏。直接复制模板工作表的话,包括Worksheet_Activate在内的工作表级宏会自动同步过来,之后再重命名新表即可。

修改后的代码:

Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim strNameOfSheetToCreate As String
strNameOfSheetToCreate = ' 替换成你获取单元格字符串的代码,比如 Wb.Sheets("Sheet1").Range("A1").Value

' 复制模板工作表到工作簿最后
Wb.Worksheets("Project Template").Copy After:=Wb.Worksheets(Wb.Worksheets.Count)
' 给新工作表重命名
ActiveSheet.Name = strNameOfSheetToCreate

这种方式不用额外设置,就能完整复制模板的格式、公式、条件格式以及工作表模块里的所有宏代码。

方法二:通过VBA项目对象模型复制代码(需额外权限)

如果必须保留“新建空白表再复制内容”的流程,就得手动把模板工作表模块里的代码复制到新表模块中,但前提是要在Excel信任中心开启信任对VBA项目对象模型的访问权限。

代码示例:

Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim strNameOfSheetToCreate As String
strNameOfSheetToCreate = ' 替换为你的单元格取值代码

' 新建并命名工作表
Wb.Sheets.Add.Name = strNameOfSheetToCreate
Dim SheetSource As Worksheet, SheetTarget As Worksheet
Set SheetSource = Wb.Worksheets("Project Template")
Set SheetTarget = Wb.Worksheets(strNameOfSheetToCreate)

' 复制格式、公式等内容
SheetSource.Cells.Copy
SheetTarget.Cells.PasteSpecial Paste:=xlPasteAllMergingConditionalFormats

' 复制工作表模块中的宏代码
Dim sourceModule As Object, targetModule As Object
Set sourceModule = Wb.VBProject.VBComponents(SheetSource.CodeName).CodeModule
Set targetModule = Wb.VBProject.VBComponents(SheetTarget.CodeName).CodeModule

' 清空目标模块原有代码,再粘贴源模块代码
targetModule.DeleteLines 1, targetModule.CountOfLines
targetModule.AddFromString sourceModule.Lines(1, sourceModule.CountOfLines)
Application.CutCopyMode = False

注意:没开启权限的话这段代码会报错,权限设置路径是文件>选项>信任中心>信任中心设置>宏设置>勾选信任对VBA项目对象模型的访问。


内容的提问来源于stack exchange,提问作者Automation Monkey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:35:14