仅通过 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?
上给定单元格中的值
我有这个工作簿,我想让它看起来像一个程序。 我还希望使用它的人只能通过特定的命令按钮退出应用程序。
这是我的代码
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?
上给定单元格中的值