【发布时间】:2016-11-14 19:27:44
【问题描述】:
更新:经过更多研究,我发现了这个重复的问题:Excel 2016 Workbook.BeforeClose event firing every other time bug。看来我使用了错误的关键字,这是一个错误,而不是我的代码问题。但是,我似乎无法下载解决方案中提到的版本。我正在运行 Windows 7 并使用 Microsoft Office 365 Pro Plus,Office 声明可用的最新版本是 16.0.6965.2105
我正在尝试使用 Workbook_BeforeClose 事件来测试是否选中了复选框。如果不是,则提示用户是否要继续关闭而不选中该框。如果他们选择“是”,则会清除工作表并保存工作簿。如果他们选择“否”,则选中该框并将“取消”设置为 true。
这在 Workbook_BeforeClose 事件第一次运行时可以正常工作。但是,第二次关闭工作表时,会出现标准 Excel“要将更改保存到...”对话框,并且不会触发 Workbook_BeforeClose 事件。如果我在对话框上单击取消并第三次关闭工作簿,则事件会触发。在对话框中单击“取消”时正在重置某些内容,但我无法弄清楚它是什么。我的代码如下:
Public Closing as Boolean
Sub Workbook_BeforeClose(Cancel As Boolean)
Debug.Print "Workbook_BeforeClose"
If Closing = True Then Exit Sub 'Closing is used as a switch to stop the event from looping on Application.ThisWorkbook.Close below
Closing = True
If Sheets(1).DraftCheckBox = False Then
If MsgBox("This file is not being saved as a draft. This workbook will be cleared if the draft box is not checked." & vbCr & vbCr & "Would you like to continue?", vbYesNo, "Warning") = vbYes Then
'If "Yes" selected
'Stuff happens here
Application.ThisWorkbook.Close savechanges:=True
Else
'If "No" selected
Sheets(1).DraftCheckBox = True
Cancel = True
End If
End If
Closing = False
End Sub
我知道 Application.EnableEvents 设置为 True。我也知道事件本身没有触发,因为在“Debug.Print”的第一行有一个停止这个停止在第一次关闭后被激活,我可以单步执行代码。在第二次关闭之后,无论是在对话框之前还是之后,它都不会激活。我应该做些什么来防止对话框出现并在每次关闭工作簿时强制 Workbook_BeforeClose 事件?
【问题讨论】:
-
把
Closing = False放在Sheets(1).DraftCheckBox = True和Cancel = True之间,除了它在哪里? -
刚刚测试,它不起作用。该事件不会触发它甚至测试关闭变量。我在第一个 debug.print 行有一个停止,并且在第二次关闭后它永远不会被激活。
-
我已经测试了在测试工作簿的关闭前事件中添加一个消息框,无论我选择什么,它每次都会触发。您是否尝试在新工作簿中仅设置此代码?
-
关于您的条件的某些内容对我来说没有意义:逻辑是“如果选中了草稿复选框,则警告用户该复选框未已选中” ???不应该吗,
If Sheets(1).DraftCheckBox <> True Then -
应该是 If = False。我来回切换以查看它是否不是某个地方的复选框的错误,并且在我复制粘贴时忘记将其更改回来。 OP 已编辑。