簡體   English   中英

如何使VBA代碼僅在活動工作簿上運行自動關閉?

[英]How to make vba code to run auto-close only on active workbook?

這是場景。 我有多個Excel工作簿,它們之間可以相互復制和粘貼數據。 因此,宏可以從一個工作簿打開open.copy.close,然后再打開到另一個工作簿。 我正在創建一個在文件關閉時自動運行宏的功能。

這是問題,當我單擊工作簿1中的宏按鈕時,應該從工作簿2中打開open.copy.close。但是,由於工作簿2中的文件關閉功能時自動運行,將發生錯誤(2個宏不能同時運行)對此有什么解決方案? 我正在尋找一種解決方案,如果它是活動的工作簿,則僅在文件關閉時自動運行宏。 這是我現在所擁有的:

Workbook 1
Sub workbook_beforeclose(cancel As Boolean)
Application.Run "Sheet1.UpdateYellowTabs_Click"

End Sub

Workbook 2
Sub Workbook_BeforeClose(Cancel As Boolean)
Workbook.BeforeClose
Application.Run "Sheet12.UpdateGreen_Click"
End Sub

如何在工作簿代碼中對其進行編碼,以使其僅在人類用戶激活/關閉時才運行,而在通過宏打開/關閉時才運行?

謝謝!

好吧,我不確定從中了解您的最終目標,但是我可以回答“技術”問題。 從技術上講,如果您要檢查給定的工作簿是否處於活動狀態: If Application.ActiveWorkbook Is Me

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  If Not Application.ActiveWorkbook Is Me Then Exit Sub ' <-- add this test

  ''''''''''''''''''''''''''
  ' Whatever code goes here
  ''''''''''''''''''''''''''
End Sub

編輯

但是問題在於,調用wb2.close將使工作簿wb2在宏執行期間成為“活動”目錄。 所以這種方法行不通。 另一種方法是在關閉工作簿之前禁用事件。 因此不會觸發事件Workbook_BeforeClose 之后,您可以根據需要啟用事件。 代碼如下:

' ... open wb2 and do the work with it
Application.EnableEvents = False
wb2.Close False
Application.EnableEvents = True

請注意,如果您已經在當前宏的開頭禁用了事件(通常建議這樣做),則不需要此附加代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM