Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
BeforeClose VBA事件关闭工作簿时Cancel=True_Vba_Excel - Fatal编程技术网

BeforeClose VBA事件关闭工作簿时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

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

该代码显示消息框,然后继续关闭工作簿。据我所知,如果“Cancel”参数设置为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

我只需要代码来显示消息框,然后如果第一张工作表未受保护,则不会关闭。

如果我将
应用程序设置为
,则可以复制它。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年了,如果它不存在,我建议将其作为自己的问题发布,或者执行一些测试以查看结果。