在closuresVBA事件closures工作簿之前取消= True

我试图写一个简短的macros,这将防止Excel工作簿的用户closures工作簿而不保护第一个工作表。

该代码显示消息框,但继续closures工作簿。 从我的理解,如果“取消”参数设置为True,工作簿不应该closures。

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 

我只需要代码来显示消息框,然后不closures,如果第一张表不受保护。

我可以复制它,如果我将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 

迫使国家放弃而不是长期的select可能是一个更安全的select。

 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