【发布时间】:2019-07-25 16:24:27
【问题描述】:
我的代码现在看起来像这样,唯一需要解决的问题是如何在不显示内置对话框的情况下获取取消。如果我单击是或否,一切正常。但是,当我单击“取消”时,会弹出内置对话框,我必须再次单击“取消”。如何使取消像取消一样工作,这样就不会弹出内置对话框?
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False
If Not closing Then
answer = MsgBox("Save data?", vbYesNoCancel + vbQuestion, "Save data?")
If answer = vbYes Or answer = vbNo Then
closing = True
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
ActiveWorkbook.Close savechanges:=answer = vbYes
Else
Cancel = True
End If
End If
Application.DisplayAlerts = True
End Sub
这是它的样子(我使用 Office 2016):
【问题讨论】:
-
Excel 2013 中没有重现,如果选择取消,则 MsgBox 是唯一的对话框。
-
However when I click Cancel built-in dialog box pops up and I have to click Cancel again.我没有遇到同样的行为。当我按下 cnacel 时,没有按预期发生 -
如果只将显示的代码复制到空工作簿,是否会得到相同的结果?如果是 - 添加 Excel 版本。如果没有 - 文件中涉及其他内容,您必须检查它是什么并包含问题。
-
如果我创建一个新工作簿并在其中插入此代码,则取消工作为否。工作簿只是关闭而不保存。
-
这看起来很奇怪,所以要么是 2016 出现问题,要么是你的安装有问题(也许是一些插件?)。剩下的唯一建议是在代码的第一行放置断点,然后查看按取消时会发生什么(使用 F8 逐步运行并检查变量值)。