当取消 = True 时,BeforeClose VBA 事件关闭工作簿

Jar*_*rom 5 excel vba

我正在尝试编写一个简短的宏,以防止 Excel 工作簿的用户在不保护第一张工作表的情况下关闭工作簿。

该代码显示消息框,但随后继续关闭工作簿。根据我的理解,如果“取消”参数设置为 True,则不应关闭工作簿。

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    If Sheets(1).ProtectContents = True Then
        Cancel = False
    Else
        MsgBox "Please Protect 'Unique Futures' Worksheet Before Closing Workbook"
        Cancel = True
    End If    
End Sub
Run Code Online (Sandbox Code Playgroud)

我只需要显示消息框的代码,如果第一张表不受保护,则不会关闭。

Gar*_*ans 3

Application.EnableEvents如果我设置为,我可以复制它False。在下面的示例中,我记得它的状态并将其放回原来的位置,但是,我不确定它是如何达到False开始状态的。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim BlnEventState as Boolean

    BlnEventState = Application.EnableEvents
    Application.EnableEvents = True

    If Sheets(1).ProtectContents = True Then
        Cancel = False
    Else
        MsgBox "Please Protect 'Unique Futures' Worksheet Before Closing Workbook"
        Cancel = True
    End If

    Application.EnableEvents = BlnEventState

End Sub
Run Code Online (Sandbox Code Playgroud)

从长远来看,强迫国家而不是阻止它可能是一个更安全的长期选择。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.EnableEvents = True
    If Sheets(1).ProtectContents = True Then
        Cancel = False
    Else
        MsgBox "Please Protect 'Unique Futures' Worksheet Before Closing Workbook"
        Cancel = True
    End If    
End Sub
Run Code Online (Sandbox Code Playgroud)