Excel VBA问题:保存后Recon 2103与Recon 2123工作表仍自动保护
解决工作表自动恢复保护的问题
问题核心
你的代码已将目标工作表加入解除保护列表,但仍自动恢复保护,大概率是存在其他触发保护的事件宏(如工作簿打开、工作表激活事件),或是执行逻辑存在遗漏。以下是修正方案:
修正后的保护控制宏
替换原代码为以下版本,逻辑更清晰,确保目标表彻底解除保护:
Private Sub quickProt() Dim ws As Worksheet ' 遍历所有工作表 For Each ws In ActiveWorkbook.Worksheets Select Case ws.Name ' 以下工作表永久解除保护 Case "Master", "GL", "Log", "ZAA110", "Recon 2103", "Recon 2123" ws.Unprotect Password:="SSDPWD@123" ' 以BE开头的工作表同样解除保护 Case Else If Left(ws.Name, 2) = "BE" Then ws.Unprotect Password:="SSDPWD@123" Else ' 其余工作表应用保护 ws.Protect Password:="SSDPWD@123" End If End Select Next ws End Sub
关键排查步骤
- 执行宏后确认状态:运行
quickProt宏,右键点击Recon 2103和Recon 2123的工作表标签,查看「保护工作表」选项是否为灰色(即未激活状态,代表已解除保护)。 - 检查自动触发的事件宏:
- 按
Alt+F11打开VBA编辑器 - 查看
ThisWorkbook模块,检查是否存在Workbook_Open、Workbook_SheetActivate等事件,这类事件可能在打开工作簿或切换工作表时重新保护目标表 - 查看
Recon 2103和Recon 2123的工作表模块,检查是否有Worksheet_Activate事件自动保护自身
- 按
- 修改事件宏逻辑:如果找到上述自动保护的事件宏,需将两个目标表排除在外。例如,若
ThisWorkbook中有Workbook_Open事件,修改为:
Private Sub Workbook_Open() Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets ' 排除目标表,不执行保护操作 If ws.Name <> "Recon 2103" And ws.Name <> "Recon 2123" Then ws.Protect Password:="SSDPWD@123" End If Next ws End Sub
完成以上操作后,Recon 2103和Recon 2123就不会再自动恢复保护状态。
内容的提问来源于stack exchange,提问作者Jabulani Nene
相关产品推荐
相关产品推荐

