2016-12-08 47 views
0

我有一個使用BeforeSave事件運行代碼的工作簿(「CodeBook.xlsm」)。當用戶打開多個工作簿並通過文件/退出選擇退出Excel時,將提示用戶是否保存工作簿,如果是,則對於CodeBook.xlsm,則運行BeforeSave代碼。問題是,此時ActiveWorkbook可能不是CodeBook.xlsm,除非這恰好是用戶在選擇退出Excel時所處的工作簿。如果用戶從另一個工作簿中退出Excel,則BeforeSave代碼正在運行,但activeworkbook是用戶的一些隨機文件,因此對BeforeSave代碼中特定工作表和範圍的所有引用都不起作用。如何激活非VBA Excel上的特定工作簿退出

我已經嘗試過使用靜態聲明來保留CodeBook和工作簿()的名稱的各種方法。激活以在應用程序退出時激活它,但是當BeforeSave運行時,它無法在任何地方拾取名稱CodeBook,缺乏將代碼硬編碼到代碼中。

有什麼建議嗎?如何在沒有代碼運行時保留內存中的變量名稱,但在用戶啓動退出Excel時存在,或者在Excel退出用戶命令而不是從application.quit時如何激活特定工作簿。使用excel 2010.

+1

VBA被附接到一個特定的工作簿,並且當該工作簿是活性被激活和訪問。假設您有兩個具有相同名稱的函數附屬於同一事件,一個屬於工作簿「A」,另一個屬於工作簿「B」。這合法嗎?當然如此!!!爲了保持一致性,Excel的**當前範圍**是活動工作簿的**範圍。我能想到的唯一解決方案是構建Excel本身的插件,只要打開Excel(帶或不帶文件)就可以訪問該插件。 – FDavidov

回答

0

我克服了這一點,包括對特定工作簿的引用。

例如,此代碼只是在關閉文檔之前將日期/時間戳記保存在Sheet1的單元格A1中。通過添加ThisWorkbook,它可以在代碼所在的特定工作簿上工作。如果您不添加ThisWorkbook,則當用戶退出時,它將在活動工作簿上工作。

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = Now() 
End Sub 

將此代碼的ThisWorkbook模塊中。

enter image description here

相關問題