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

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

关键排查步骤

  1. 执行宏后确认状态:运行quickProt宏,右键点击Recon 2103和Recon 2123的工作表标签,查看「保护工作表」选项是否为灰色(即未激活状态,代表已解除保护)。
  2. 检查自动触发的事件宏:
    • 按Alt+F11打开VBA编辑器
    • 查看ThisWorkbook模块,检查是否存在Workbook_Open、Workbook_SheetActivate等事件,这类事件可能在打开工作簿或切换工作表时重新保护目标表
    • 查看Recon 2103和Recon 2123的工作表模块,检查是否有Worksheet_Activate事件自动保护自身
  3. 修改事件宏逻辑:如果找到上述自动保护的事件宏,需将两个目标表排除在外。例如,若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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 19:56:08