当Cancel = True时,关闭关闭VBA事件关闭工作簿

时间:2016-04-27 17:14:02

标签: excel vba 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

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

1 个答案:

答案 0 :(得分:2)

如果我将Application.EnableEvents设置为False,我可以复制它。在下面的例子中,我记得它的状态将它放回原来,但是,我不确定它是如何进入False状态的。{/ p>

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

强迫国家而不是将其重新定位可能是一个更安全的长期选择。

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