我有一个只读的Excel工作簿,其中包含一个VBA应用程序。该应用程序将需要保存的任何数据保存在数据库中,并且工作簿始终不保存就关闭(通过在BeforeClose中设置ThisWorkbook.Saved = True)。
我有以下问题:
用户在Windows资源管理器中双击工作簿,工作簿打开。
用户第二次在Windows资源管理器中双击工作簿。
Excel提示:“MyWorkbook.xls已经打开。重新打开会导致您所做的任何更改被丢弃。您要重新打开MyWorkbook.xls吗?”
如果用户单击“Yes”,则重新打开工作簿而不执行已经打开的实例的BeforeClose事件处理程序。
这是我的应用程序中的问题,因为这意味着BeforeClose事件处理程序中的一些重要清除代码未被执行。
有人能提出一个VBA解决方案吗?可以是:
抑制重新打开工作簿的提示。而是静默使用已经打开的实例。
以某种方式在原始实例关闭之前获取BeforeClose或其他事件处理程序,以便我可以运行我的清理代码。
更新:
这是Excel 2003。
我可以通过在Workbook_SheetChanged事件处理程序中设置“ThisWorkbook.Saved = True”来消除不需要的提示(VBA应用程序负责保存需要保存在数据库中的任何数据,因此我不关心Excel保存更改)。
然而,这并不能解决我的问题:如果我这样做,那么在资源管理器中双击工作簿会默默地重新打开工作簿,但仍然不调用我的“BeforeClose”事件处理程序。
因此,重新表述问题:
有没有一种方法使用VBA来检测和拦截以这种方式重新打开工作簿?
更新2
接受BKimmel的答案-似乎没有从工作簿内部拦截此事件的VBA方法。
我要实现的解决方案是将应用程序代码移动到XLA插件中,该插件在加载工作簿时自动加载(如果尚未加载)。插件可以处理Open和BeforeClose事件,并存储它需要进行清理的信息。
我有以下问题:
用户在Windows资源管理器中双击工作簿,工作簿打开。
用户第二次在Windows资源管理器中双击工作簿。
Excel提示:“MyWorkbook.xls已经打开。重新打开会导致您所做的任何更改被丢弃。您要重新打开MyWorkbook.xls吗?”
如果用户单击“Yes”,则重新打开工作簿而不执行已经打开的实例的BeforeClose事件处理程序。
这是我的应用程序中的问题,因为这意味着BeforeClose事件处理程序中的一些重要清除代码未被执行。
有人能提出一个VBA解决方案吗?可以是:
抑制重新打开工作簿的提示。而是静默使用已经打开的实例。
以某种方式在原始实例关闭之前获取BeforeClose或其他事件处理程序,以便我可以运行我的清理代码。
更新:
这是Excel 2003。
我可以通过在Workbook_SheetChanged事件处理程序中设置“ThisWorkbook.Saved = True”来消除不需要的提示(VBA应用程序负责保存需要保存在数据库中的任何数据,因此我不关心Excel保存更改)。
然而,这并不能解决我的问题:如果我这样做,那么在资源管理器中双击工作簿会默默地重新打开工作簿,但仍然不调用我的“BeforeClose”事件处理程序。
因此,重新表述问题:
有没有一种方法使用VBA来检测和拦截以这种方式重新打开工作簿?
更新2
接受BKimmel的答案-似乎没有从工作簿内部拦截此事件的VBA方法。
我要实现的解决方案是将应用程序代码移动到XLA插件中,该插件在加载工作簿时自动加载(如果尚未加载)。插件可以处理Open和BeforeClose事件,并存储它需要进行清理的信息。