想要在关闭Excel工作表的窗口时执行一些自定义代码。
我正在使用workbook_windowDeactivate。当控件调用函数时,VBA脚本变量中的值会被破坏。这是VBA的正常行为吗?在执行“workbook_windowDeactivate”之前,有没有办法将变量中的值进行零售?
答案 0 :(得分:0)
如果将变量存储在标准模块中作为静态变量或全局变量,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中保存工作簿,单击放入colde的工作表,然后单击另一个工作表,然后关闭工作簿。您应该看到2条消息,第一条来自关闭前事件,显示您取消工作表的时间和由Windows停用事件触发的nextr。