想要在關閉Excel工作表窗口時執行少量自定義代碼。使用VBA的Excel工作表關閉按鈕事件
上午使用的是workbook_windowDeactivate。當控件調用函數時,VBA腳本變量中的值被破壞。這是VBA的正常行爲嗎?有沒有辦法將變量中的值零售到執行「workbook_windowDeactivate」?
想要在關閉Excel工作表窗口時執行少量自定義代碼。使用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
recoreded。
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條消息,其中第一條來自before close事件,顯示您取消工作表的時間以及由窗口停用事件觸發的nextr。
你是什麼意思的損壞?請發佈事件處理程序的代碼 –