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

基于单元格引用保存含宏和窗体的工作簿副本问题求助

问题解决:保存带宏和窗体的工作簿副本并删除指定工作表

你的代码通过复制工作表创建新工作簿,这种方式不会复制工作簿级别的宏、窗体以及工作表之外的其他对象,所以新文件里没有宏和窗体。正确的做法是先保存原工作簿的完整副本,再在副本中删除不需要的工作表,这样所有宏、窗体都会保留。

修改后的代码

Sub SaveFileCopy()
    Dim FileName As String, FilePath As String
    Dim targetWB As Workbook
    Dim sheetToDelete As String
    
    ' 指定要删除的工作表名称,替换成你实际要删除的表名
    sheetToDelete = "Reception Sheet"
    
    Set OldWorkBook = ThisWorkbook
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
        .EnableEvents = False ' 避免触发工作簿事件干扰操作
    End With
    
    On Error GoTo myerror
    ' 获取文件名和目标路径
    With OldWorkBook.Sheets("Reception Sheet")
        FilePath = "C:\HDMS\JOBS\" & .Range("Z6").Value
        FileName = .Range("Z6").Value & ".xlsm"
    End With
    
    ' 目标文件夹不存在则创建
    If Dir(FilePath, vbDirectory) = "" Then
        MkDir FilePath
    End If
    FilePath = FilePath & "\"
    
    ' 保存原工作簿的完整副本,保留所有宏和窗体
    OldWorkBook.SaveCopyAs FilePath & FileName
    
    ' 打开副本工作簿
    Set targetWB = Workbooks.Open(FilePath & FileName)
    
    ' 删除指定工作表(先检查是否存在)
    If WorksheetExists(sheetToDelete, targetWB) Then
        targetWB.Sheets(sheetToDelete).Delete
    End If
    
    ' 保存修改并关闭副本
    targetWB.Save
    targetWB.Close False
    
myerror:
    ' 恢复应用设置
    With Application
        .ScreenUpdating = True
        .DisplayAlerts = True
        .EnableEvents = True
    End With
    ' 错误提示与清理
    If Err <> 0 Then
        MsgBox "错误:" & Error(Err), vbExclamation, "错误提示"
        If Not targetWB Is Nothing Then
            If targetWB.Path <> "" Then targetWB.Close False
        End If
    End If
End Sub

' 辅助函数:检查指定工作表是否存在于目标工作簿
Function WorksheetExists(sheetName As String, wb As Workbook) As Boolean
    Dim ws As Worksheet
    On Error Resume Next
    Set ws = wb.Sheets(sheetName)
    On Error GoTo 0
    WorksheetExists = Not ws Is Nothing
End Function

关键改动说明

  • 用SaveCopyAs直接保存原工作簿的完整副本,确保保留所有宏、窗体、自定义对象
  • 打开副本后再删除指定工作表,避免复制工作表导致的对象丢失问题
  • 增加工作表存在性检查,防止因目标工作表不存在触发错误
  • 关闭工作簿事件触发,避免保存/打开过程中原有事件代码干扰操作
  • 优化错误处理逻辑,确保异常时能正确恢复应用设置并清理资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:35:06