簡體   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