首页 > 解决方案 > 关闭工作簿,捕获 Cancel 事件

问题描述

我有Workbook_BeforeClose事件代码。我喜欢它现在的工作方式,但我刚刚注意到Application.Visible = False. 当我单击是时,它会保存工作簿,当我单击否时,它什么也不做,但是当我单击取消时,它已经完成Application.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

标签: excelvba

解决方案


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

所以也许是这样的:

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

推荐阅读