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