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

Excel宏中如何临时禁用Worksheet_Deactivate事件直至工作簿保存关闭?

解决工作表Deactivate事件临时禁用问题

步骤1:在工作簿模块添加控制变量与属性

打开VBA编辑器,双击ThisWorkbook模块,添加以下代码:

' 模块级变量,控制是否禁用Deactivate事件
Private DisableDeactivateEvents As Boolean

' 设置禁用状态的属性
Property Let SetDisableDeactivate(state As Boolean)
    DisableDeactivateEvents = state
End Property

' 获取当前禁用状态的属性
Property Get GetDisableDeactivate() As Boolean
    GetDisableDeactivate = DisableDeactivateEvents
End Property

' 工作簿关闭前自动恢复事件并保存
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Me.Save
    DisableDeactivateEvents = False
End Sub

步骤2:修改所有工作表的Deactivate事件

打开每个工作表的代码模块,修改原有的Worksheet_Deactivate事件,加入判断逻辑:

Private Sub Worksheet_Deactivate()
    ' 仅当未临时禁用时,执行隐藏操作
    If Not ThisWorkbook.GetDisableDeactivate Then
        Me.Visible = xlSheetHidden
    End If
End Sub

步骤3:修复并更新NouvelleFiche宏

修改原宏,添加临时禁用事件的代码,同时修正原代码中的变量错误:

Sub NouvelleFiche()
    Dim shtName As String
    Dim wks As Worksheet
    
    ' 开启临时禁用Deactivate事件状态
    ThisWorkbook.SetDisableDeactivate = True
    
    Sheets("blank").Visible = True
    Worksheets("Blank").Copy after:=Sheets(Worksheets.Count)
    Set wks = ActiveSheet
    
    ' 修正变量名错误:原代码误用sName,统一为shtName
    Do While shtName <> wks.Name
        shtName = Application.InputBox(Prompt:="Enter new worksheet name")
        On Error Resume Next
        wks.Name = shtName
        On Error GoTo 0
    Loop
    
    Set wks = Nothing
End Sub

原理说明

  • 调用NouvelleFiche宏时,会将工作簿的DisableDeactivateEvents变量设为True,此时所有工作表的Deactivate事件会跳过隐藏操作,你可以自由切换到Index工作表为新表设置超链接。
  • 当关闭工作簿时,Workbook_BeforeClose事件会自动保存工作簿,并将变量重置为False,下次打开工作簿时,所有工作表的Deactivate事件恢复正常功能。
  • 仅在调用NouvelleFiche宏时才会触发临时禁用,其他场景下事件不受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 04:53:09