繁体   English   中英

使用VBA的Excel工作表的关闭按钮事件

[英]Close button event of excel sheet using VBA

在关闭Excel工作表的窗口时想执行一些自定义代码。

我正在使用workbook_windowDeactivate相同。 当控件调用该函数时,VBA脚本变量中的值会损坏。 这是VBA的正常行为吗? 在执行“ workbook_windowDeactivate”之前,是否有任何方法可以将变量中的值存储起来?

如果将变量以静态或全局变量的形式存储在标准模块中,则excel将跟踪它们,除非您必须重置项目。 例如在一个模块中,我有:

Public TimeLastDeactivatedSheet1 As Date

Sub showTime()
MsgBox CStr(TimeLastDeactivatedSheet1)
End Sub

在ThisWorkbook代码中,我有:

Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
    TimeLastDeactivatedSheet1 = Now   
End Sub

您可以通过运行showTime() sub测试正在记录的内容。 放置代码的另一个地方是工作表对象,具体取决于您希望它如何工作:

Private Sub Worksheet_Deactivate()
    TimeLastDeactivatedSheet1 = Now
End Sub

当然,当您关闭工作簿时,将重置项目,因此,如果要在关闭后保留变量,则需要将其存储在例如工作表或文本文件中。 您可以使用Workbook_BeforeClose事件处理程序执行此操作。

编辑:

大概最容易做一个例子。 将代码放在标准模块的顶行:

Public TimeLastDeactivatedSheet1 As Date

将此代码放在工作表模块中:

Private Sub Worksheet_Deactivate()
    TimeLastDeactivatedSheet1 = Now
End Sub

将此代码放在工作簿模块中:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    MsgBox ("This message is being sent by Workbook_BeforeClose on data stored by Worksheet_Deactivate. Time = " _
            & TimeLastDeactivatedSheet1)
End Sub

Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
    TimeLastDeactivatedSheet1 = Now
    Call MsgBox("This message is being set by Workbook_WindowDeactivate. Time = " & TimeLastDeactivatedSheet1)
End Sub

保存该工作簿,然后在excel中单击您放置了感冒的工作表,然后单击另一个工作表,然后关闭工作簿。 您应该看到2条消息,前一条消息来自close之前的事件,其中显示了您剖析工作表的时间,下一条消息由windows deactivate事件触发。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM