如何在非VBA Excel Quit上激活特定工作簿

时间:2016-12-08 15:33:17

标签: excel-vba vba excel

我有一个使用BeforeSave事件运行代码的工作簿(“CodeBook.xlsm”)。当用户打开多个工作簿并选择通过文件/退出退出excel时,将提示用户是否保存工作簿,如果是,则为CodeBook.xlsm,然后运行BeforeSave代码。问题是,此时ActiveWorkbook可能不是CodeBook.xlsm,除非恰好是用户在选择退出Excel时所在的工作簿。如果用户从另一个工作簿退出excel,则BeforeSave代码正在运行,但activeworkbook是用户的一些随机文件,因此对BeforeSave代码中特定工作表和范围的所有引用都不起作用。

我已经尝试过各种方法使用静态声明来保留CodeBook和workbook()的名称。在应用程序退出时激活它以激活它,但是当BeforeSave运行时,它无法在任何地方获取名称CodeBook,简短将名称硬编码到代码中。

有什么建议吗?如果没有代码运行,如何在内存中保留变量名,但是当用户启动退出excel时,或者当Excel从用户命令而不是从application.quit退出时如何激活特定工作簿。使用excel 2010。

1 个答案:

答案 0 :(得分:0)

我通过包含对特定工作簿的引用来克服这个问题。

例如,此代码只是在关闭文档之前将日期/时间戳保存在A1的单元格Sheet1中。通过添加ThisWorkbook,它可以处理代码所在的特定工作簿。如果您没有添加ThisWorkbook,那么当用户退出时,它将在活动工作簿上运行。

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

将此代码放在ThisWorkbook模块中。

enter image description here