我正在使用VS2008。在我的应用程序中,从MMC管理单元运行Excel 2003工作表(在Office 2007中),以便用户可以修改某些参数。
代码订阅了BeforeClosing事件,Window Deactivate和WindowActivate。只有在用户选择关闭Excel应用程序后,一切都会顺利运行,系统会提示他保存文件yes / no / cancel,并且永远不会/始终保存工作表。问题是我正在使用Workbook.Close()来实际关闭该死的东西。它的第一个参数是一个bool,如果它是真的它将每次保存,从不保存,而在Type.missing它会在关闭时再次提示。所以用户被提示一次(这个只有取消功能),然后Workbook.Close()再次提示他保存(这个有/无功能但没有取消功能 - 即使你点击它也会关闭取消)。
不,我已经尝试订阅BeforeSave事件并尝试将其放在beforeClose中,但它不会触发;强制保存也不是解决方案,跳过关闭工作簿并杀死excel(以避免工作簿关闭)也不是解决方案。
我还试图通过简单地释放与工作簿关联的com对象来避免使用workbook.close,但是无济于事。
有一点需要注意,如果单击文件保存,则会出现一个对话框,通知您如果保存电子表格,Office 2003中可能无法使用某些功能(可能会出现额外的对话框?)
一个可能的解决方案(我将作为最后的手段)将在关闭时压缩保存提示并从代码(我可以控制的对话框)触发我自己的对话框并读取结果并执行操作因此(我想避免这种情况,因为它必须用20多种语言翻译并花费大量时间......)
我对解决方案感到茫然,如果您有任何想法,我将非常感激。
答案 0 :(得分:1)
解决:
我的一位同事终于破解了它......显然在直接关闭Excel时存在一些问题,因此通过将一个线程委托给1秒休眠然后杀死Excel应用程序的基本方法,它能够保存(如果它是由用户请求并成功退出。
答案 1 :(得分:0)
您还可以将Interactive property设置为false。这将阻止XL显示任何对话框。