工作表受保护时,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
相关产品推荐
相关产品推荐

