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

工作表受保护时,VBA保存无形状Excel文件报错的解决方法

解决方法

原问题出在复制后的工作表继承了原表的保护状态,受保护的工作表不允许修改形状对象,因此执行shp.Delete时触发错误。只需在删除形状前解除新工作表的保护即可,修改后的代码如下:

Sub SR_SaveAsExcel()
    Dim invno As Long
    Dim fname As String
    
    invno = Range("C9")
    fname = "Sales Records of "
    
    Worksheets("Sales Records").Copy
    
    Application.DisplayAlerts = False
    
    ' 解除复制后工作表的保护(如有密码,添加Password参数:Unprotect Password:="你的密码")
    If ActiveSheet.ProtectContents Then
        ActiveSheet.Unprotect
    End If
    
    Dim shp As Shape
    For Each shp In ActiveSheet.Shapes
        shp.Delete
    Next shp
    
    ' 可选:如果需要重新保护工作表,取消下面两行注释
    ' ActiveSheet.Protect
    ' ActiveSheet.EnableSelection = xlNoRestrictions ' 根据需求设置选中权限
    
    ActiveWorkbook.SaveAs Filename:="F:\Tutorial & Exercise\Excel Practice\My Work\Inventory\Saved Sales Records\" & fname & " " & invno & ".xlsx", FileFormat:=51
    
    Application.DisplayAlerts = True
End Sub

关键说明

  • 如果原工作表保护时设置了密码,必须在Unprotect后添加密码参数,比如ActiveSheet.Unprotect Password:="123456",否则无法解除保护。
  • 若不需要保存后的工作表保持保护状态,可忽略重新保护的代码部分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 20:13:17