Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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

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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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
Excel 正在关闭工作簿,捕获取消事件_Excel_Vba - Fatal编程技术网

Excel 正在关闭工作簿,捕获取消事件

Excel 正在关闭工作簿,捕获取消事件,excel,vba,Excel,Vba,在关闭事件之前,我有工作簿\u的代码。我喜欢它现在的工作方式,但我刚刚注意到Application.Visible=False存在一个问题。当我单击“是”时,它将保存工作簿;当我单击“否”时,它将不执行任何操作;但当我单击“取消”时,它将保存已完成的应用程序。Visible=False,并且我看不到Excel应用程序。如何解决这个问题 Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next

在关闭事件之前,我有工作簿\u的代码。我喜欢它现在的工作方式,但我刚刚注意到Application.Visible=False存在一个问题。当我单击“是”时,它将保存工作簿;当我单击“否”时,它将不执行任何操作;但当我单击“取消”时,它将保存已完成的应用程序。Visible=False,并且我看不到Excel应用程序。如何解决这个问题

Private Sub Workbook_BeforeClose(Cancel As Boolean)

On Error Resume Next

        Application.Visible = False

        Application.DisplayFormulaBar = True
        ActiveWindow.DisplayHeadings = True
        ActiveWindow.DisplayGridlines = True

        ThisWorkbook.Unprotect Password:="123456"

        ActiveWorkbook.Sheets("Start").Visible = True

        ThisWorkbook.Worksheets("Start").Activate

        ThisWorkbook.Protect Password:="123456", Structure:=True, Windows:=False

  End Sub

与其依赖内置对话框,不如尝试使用自己的对话框。这样你就可以更好地控制发生的事情和时间

所以可能是这样的:

Dim closing As Boolean
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Not closing Then
        answer = MsgBox("Save data?", vbYesNoCancel + vbQuestion, "Save data?")

        If answer = vbYes Or answer = vbNo Then
            closing = True
            ' your code here
            ActiveWorkbook.Close savechanges:=answer = vbYes
        Else
            Cancel = True
        End If
    End If
End Sub

我认为你甚至不需要那些台词。你不能删除它们吗?我知道我可以删除应用程序。Visible=False并且睡眠良好,但是当Excel不可见并且所有这些具有可见和密码保护的操作都在后台进行时,它看起来更酷。与其隐藏应用程序,为什么不关闭屏幕更新?很好!是否有可能完全禁用内置对话框,以便用户只看到这一个?现在,在这个对话框之后是内置对话框。@user7202022如果没有任何未保存的更改,我认为不应该弹出内置对话框,因此ActiveWorkbook.Close savechanges:=answer=vbYes行应该确保在进入内置对话框之前保存或放弃任何更改。您的代码是否可能在该行之后以某种方式更改工作簿?它在一个非常基本的测试中对我有效。我添加了application.displayalerts命令。当我按“取消”时,将弹出“内置”对话框。如果我使用“是”或“否”,则一切正常。@user7202022如果取消,您是否保留了将“取消”设置为“真”的部分?行:Cancel=True,否则我不敢肯定