BeforeClose VBA事件关闭工作簿时Cancel=True
我正在尝试编写一个短宏,以防止excel工作簿的用户在不保护第一张工作表的情况下关闭工作簿 该代码显示消息框,然后继续关闭工作簿。据我所知,如果“Cancel”参数设置为True,则工作簿不应关闭BeforeClose VBA事件关闭工作簿时Cancel=True,vba,excel,Vba,Excel,我正在尝试编写一个短宏,以防止excel工作簿的用户在不保护第一张工作表的情况下关闭工作簿 该代码显示消息框,然后继续关闭工作簿。据我所知,如果“Cancel”参数设置为True,则工作簿不应关闭 Private Sub Workbook_BeforeClose(Cancel As Boolean) If Sheets(1).ProtectContents = True Then Cancel = False Else MsgBox "Pleas
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
我只需要代码来显示消息框,然后如果第一张工作表未受保护,则不会关闭。如果我将
应用程序设置为,则可以复制它。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
从长远来看,强迫政府而不是让它倒退可能是更安全的选择
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
我刚刚尝试了取消=不工作表(1)。保护内容,效果很好。您是否已经完成了代码?您是否确定索引1中的工作表实际上指向了您正在测试的工作表?您可以使用VBE中的即时窗口快速测试这一点。(按CTRL+G打开即时窗口,然后键入?Sheets(1).Name
)我已将代码粘贴到新工作簿的ThisWorkbook模块中。当我试图关闭它时,我收到了消息,工作簿保持打开状态。所以,它对我起了作用。我想不出你是如何得到MsgBox却不让它取消的。奇怪的是,我还打开了一个新工作簿并粘贴了代码,但在显示消息框后它仍然关闭。看起来问题可能与代码无关。我猜您的意思是Cancel=True
?@user2543601是否有此帮助?如果应用程序。EnableEvents
首先设置为False
,是否会触发关闭之前的事件,如果工作簿关闭事件被取消,如何恢复任何操作?我已经在这里呆了4年了,如果它不存在,我建议将其作为自己的问题发布,或者执行一些测试以查看结果。