仅通过 VBA 关闭应用程序

Closing application only thru VBA

我有这个工作簿,我想让它看起来像一个程序。 我还希望使用它的人只能通过特定的命令按钮退出应用程序。

这是我的代码

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.OnKey "{ESC}"
Cancel = True
MsgBox "Please use the QUIT button to save and close the database."
End Sub

对于退出按钮:

Sub SAVE_CLOSE
ActiveWorkbook.Save
If Workbooks.Count < 2 Then
Application.Quit
Else
ActiveWorkbook.Close
End If
End Sub

我的问题是,当用户通过此按钮退出应用程序时,它会触发 Private Sub Workbook_BeforeClose 事件并取消退出过程。你会如何解决这个问题?

谢谢!

只需在按钮处理程序中设置一个标志并在 BeforeClose 事件中对其进行测试:

在本手册中...

Public okToClose As Boolean                      '<--module level.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Not okToClose Then
        Application.OnKey "{ESC}"
        Cancel = True
        MsgBox "Please use the QUIT button to save and close the database."
    End If
End Sub

...并在处理程序中...

Sub SAVE_CLOSE()
    ActiveWorkbook.Save
    ThisWorkbook.okToClose = True
    If Workbooks.Count < 2 Then
        Application.Quit
    Else
        ActiveWorkbook.Close
    End If
End Sub

请注意,您应该避免调用 ActiveWorkbook.Close - 请改用硬引用。这是毁掉某人一天的工作价值的好方法...

由于每当工作簿即将关闭时都会调用 Workbook_BeforeClose()(无论是否是您的方法),因此您需要在该方法中使用某种方式来知道调用它的是您的按钮。也许是全局变量,或者是隐藏 sheet?

上给定单元格中的值