多次关闭时提示保存

Posted

技术标签:

【中文标题】多次关闭时提示保存【英文标题】:prompt saving on close multiple times 【发布时间】:2011-01-20 18:29:35 【问题描述】:

我正在使用 VS2008。在我的应用程序中,我从 MMC 管理单元运行 Excel 2003 工作表(在 Office 2007 中),以便用户可以修改某些参数。

代码订阅了 BeforeClosing 事件、Window Deactivate 和 WindowActivate。只有在用户选择关闭 Excel 应用程序后,一切才能顺利运行,系统会提示他保存文件是/否/取消,并且永远不会/始终保存工作表。问题是我正在使用 Workbook.Close() 来实际关闭该死的东西。它的第一个参数是一个布尔值,如果它为 true,它将每次都保存,如果为 false,则从不保存,而在 Type.missing 上,它将在关闭时再次提示。因此,用户被提示一次(这个只有取消功能),然后 Workbook.Close() 再次提示他保存(这个有是/否功能但没有取消功能 - 即使您单击它也会关闭取消)。

不,我尝试订阅 BeforeSave 事件并尝试将其放入 beforeClose 但它不会触发;强制保存也不是解决方案,跳过关闭工作簿并杀死 excel(以避免工作簿关闭)也不是解决方案。

我也尝试通过简单地释放与工作簿关联的 com 对象来避免 workbook.close,但无济于事。

需要注意的是,如果您单击文件保存,则会出现一个对话框,通知您如果保存电子表格,某些功能可能在 Office 2003 中不可用(这个额外的对话框会不会有问题?)

一种可能的解决方案(我将作为最后的手段)是在关闭时取消保存提示并从代码中触发我自己的对话框(我可以控制的对话框)并读取结果并执行操作因此(我想避免这种情况,因为它必须翻译成 20 多种语言并且需要很多时间......)

我不知所措,如果您有任何想法,我将不胜感激。

【问题讨论】:

【参考方案1】:

已解决:

我的一位同事终于破解了它...显然在直接关闭 Excel 时出现了一些问题,因此通过委派线程休眠 1 秒然后杀死 Excel 应用程序的基本方法,它能够保存(如果它是由用户请求的)并成功退出。

【讨论】:

只需将答案标记为正确答案(是的,甚至是您自己的答案)。这表明 *** 解决了一个问题。【参考方案2】:

您也可以将Interactive property 设置为false。这将阻止 XL 显示任何对话框。

【讨论】:

这也可以;问题是我希望用户拥有完整的功能。是的,我可以在退出时取消保存提示并在 workbook.close 中使用 type.missing 但问题是,如果我在该对话框上按取消,excel 仍会关闭。

以上是关于多次关闭时提示保存的主要内容,如果未能解决你的问题,请参考以下文章

关闭时禁用 Interop.Excel 的默认保存提示

MS Access - 使用子表单过滤时禁止保存提示

用js实现关闭或刷新页面时提示保存更改信息

关于excel vba 常用警告提示关闭的问题

怎么才能关闭这个office2013版本的vba工程提示?每次保存文件时候都会有如下提示,很不喜欢

如何在不提示保存的情况下使用 Windows“X”关闭 Excel 工作簿