想在关闭 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 条消息,第一条来自关闭前的事件,显示您解剖工作表的时间,而下一条则由 windows deactivate 事件触发。